Стартиране на C# код от javascript

12 отговора 747 прегледа
#1

Стартиране на C# код от javascript

Имам следният проблем: Трябва да направя някои проверки с С# код в ASP.NET страница при изход от нея - клик в/у линк, клик в/у бутона back, изход от браузъра и т.н. До момента установих, че само(?) javascript събитието
window.onbeforeunload хваща всички тези варианти.
Въпроса ми е има ли начин от javascript да изпълня ф-я с С# код в ASPX страницата ?

Отговор
в отговор на Veso #2

Re: Стартиране на C# код от javascript

Може - има доста варианти . Създваш SCRIPT обект в HEAD-a след това му сетваш SRC-то на някакъв server side скрипт или пък сменяш location-a. Сега имам работа - довечера ще ти дам две примерчета.

Отговор
в отговор на Veso #3

Re: Стартиране на C# код от javascript

Можеш да прегледаш това-онова за XmlHttpRequest, примерно [линк] и [линк]

Основната идея е, че можеш да правиш http заявки, без да се махаш от текущата страница. onbeforeunload май обаче е само IE (ако изобщо ти е проблем).

Отговор
в отговор на Учeщ #4

Re: Стартиране на C# код от javascript

Любопитен съм. Интересува ме по точно как от javascript на ASPX страница да извикам ф-я от cs файла на тази страница. Благодаря предварително

Отговор
в отговор на Paдo #5

Re: Стартиране на C# код от javascript

Да, onbeforeunload е само за IE и FireFox. Мога да го сменя с onunload, но основният проблем остава - как аджеба да накарам jscrip-та да стартира C# код от неговия cs файл

Отговор
в отговор на Veso #6

Re: Стартиране на C# код от javascript

Не мисля че работи само под тези твете програми тъй като Google maps, а и ми се струва че и gmail също, го ползват и работят под всички browser-и.

Отговор
в отговор на Veso #7

Re: Стартиране на C# код от javascript

Това което са ти дали за XmlHttpRequest обекта е добър вариант - но недостатъкът е че ще работи под Mozilla и IE - ще трябва да проверяваш и тн.
Този начин показан по-долу е по-хитър - ще работи при всички браузери поддържащи DOM 1 (Opera и тн). Като разбира се подменяш index.aspx във функцията с твоя URL. :)


<%@ Page Language="C#"%>
<%
if(Request.QueryString["calltofunction"] != null)
{

Response.AddHeader("Content-Type", "text/javascript");
/**************************************************
Tuka razbira se moje da napravish i drugi neshta
da si izvikash nyakakva tvoya funciya.
***************************************************/
Response.Write("alert('Az idvam ot server side-a');");
return;
}
%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "[линк]">
<html>
<head>
<title></title>
<script language="JavaScript" type="text/javascript">
<!--//
/************************************
Suotvetno mojesh da izvikash
funkciyata na vseki event koito
iskash
************************************/
function callServerSide()
{
var _now=new Date();
var myHead=document.getElementsByTagName("HEAD");
myHead=myHead[0];//тъпичко но не чак толкова ..
var newScript=document.createElement("SCRIPT");
newScript.src="index.aspx?calltofunction="+_now;
myHead.appendChild(newScript);
}
//-->
</script>
</head>
<body>
<input type="button" value="Izvikai Server Side Funkciyata" onclick="callServerSide();">
</body>
</html>



Редактирано от Учeщ на

Отговор
в отговор на Учeщ #8

Re: Стартиране на C# код от javascript

Благодаря ! Ще пробвам и ще пиша за резултата.

Отговор
в отговор на Veso #9

Re: Стартиране на C# код от javascript

"как аджеба да накарам jscrip-та да стартира C# код от неговия cs файл"

Ами имаш следната ситуация - JavaScript в браузъра и WebApplication на сървъра под формата на dll (компилираните cs файлове) + купчина config хави. Колкото и да се скрива разликата клиент/сървър в ASP.NET приложенията все пак я има. т.е от браузъра можеш да викаш функционалност на сървъра под формата на http request или да ползваш уеб сървиси (SOAP). Не става просто да викнеш парче C# (или каквато и да е друга) функционалност.

Отговор
в отговор на Paдo #10

Re: Стартиране на C# код от javascript

Прав си Радо, благодаря за линковете !

Отговор
в отговор на Учeщ #11

Re: Стартиране на C# код от javascript

Да, всичко си работи и ми върши работа. Благодаря още веднъж.
В момента ми дава jscript грешка в браузъра и се опитвам да разбера от къде идва. Лошото е, че с дебъгера всичко работи нормално и не дава грешки. Щото Визуалното Студио и туй го можело - [линк]

Отговор
в отговор на Учeщ #12

PHP вариант

Принципа е същия.


<?php
/****************************************
Пишем в едно .txt стринг написан
в един input type="text" - без
да презареждаме естествено. ;)
11.05.2005
****************************************/
function saveToFile()
{
header("Content-Type: text/javascript");
if(isset($_GET['tosave'])){
$fp=fopen("myfile.txt","a+");
fwrite($fp,$_GET['tosave']."\r\n");
fclose($fp);
echo "alert(\"".$_GET['tosave']." - writed successfully!\");";
}
exit();
}
if(isset($_GET["calltofunction"]))
{
saveToFile();
}
?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "[линк]">
<html>
<head>
<title></title>
<script language="JavaScript" type="text/javascript">
<!--//
/************************************
Suotvetno mojesh da izvikash
funkciyata na vseki event koito
iskash
************************************/

function callServerSide()
{
var _now=new Date();
var myHead=document.getElementsByTagName("HEAD");
var valTosaVe=document.getElementById("tosave").value;
myHead=myHead[0];//тъпичко но не чак толкова ..
var newScript=document.createElement("SCRIPT");
newScript.src="<?=$_SERVER['SCRIPT_NAME'];?>?calltofunction="+_now+"&tosave="+valTosaVe;
myHead.appendChild(newScript);
}
//-->
</script>
</head>
<body>
<input type="button" value="Call Server Side function" onclick="callServerSide();">
<input type="text" id="tosave">
</body>
</html>





Редактирано от Учeщ на

Отговор
в отговор на Учeщ #13

Re: PHP вариант

Е, това ми идва в повече

Отговор