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

5 отговора 312 прегледа
#1

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

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

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

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

Специално за натискане на линк има едно нещо, наречено LinkButton. То прави ресъбмит и в неговия Click евент можеш да правиш каквото си щеш.
За останалото по принцип има начин, - ако скрипта ресъбмитва страницата (нещо като this.form(0).submit() ), като преди това можеш да нагласиш някакви hidden полета или и аз не знам какво.Освен това Page класа има едно събитие Unload, което също би ти свършило работа. Хайде да не питам обаче за какво ти трябва да проверяваш каквото и да било при затваряне на прозореца. Намирисва ми на досаждащ попъп или някаква гавра с юзъра.

но след безсънни дълги нощи станах силен и голям
и вече знам, че мога да се справя сам
Отговор
в отговор на Survivor #3

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

Unload() на страницата не прихваща всички тия случаи. Пробвах да прихвана събитията от Global.asax но не става и с тях. Формата ми няма submit button или нещо такова за което да се закача. Случая е по тривиален - страница за поръчки на стоки.

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

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

Може да използваш callback - в сегашната версия на .NET framework-а го няма вградено(има го във версия 2.), но мжеш да си го заобиколиш по следния начин:
Слагаш си във aspx-a следния скрипт:
<script>
function DoCallback(params)
{
var pageUrl = "ИМЕТО_НА_ТВОЯТА_ФОРМА.aspx" + "?callback=true¶m=" + params;
var xmlRequest = new ActiveXObject("Microsoft.XMLHTTP");
xmlRequest.open("GET", pageUrl, false);
xmlRequest.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
xmlRequest.send(null);
return xmlRequest;
}
function closeIt()
{
DoCallback();

}
</script>

Въпросната фунцкия closeIt() я слагаш във бодито
<body MS_POSITIONING="FlowLayout" bottomMargin="0" leftMargin="0" topMargin="0" rightMargin="0" style="overflow: auto;"
onbeforeunload="closeIt()">

Това което си подал във нея - (частта след въпросителната) ти се появява във queryString-a на формата: така че може във Page_Load() да си правиш една проверка дали
Request.QueryString["callback"] != null и ако не е си го обработваш - може да си слагаш и допълнителни параметри.
нещо от типа:
private void Page_Load(object sender, System.EventArgs e)
{
if(Request.QueryString["callback"] != null)
{
ПРАВИШ_КАКВОТО_ПРАВИШ - това ти е все едно допълнителен event
return;
}
if(!IsPostBack) ----оттук нататък стандартната технология.
.........

Отговор
в отговор на Blandings Castle #5

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

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

Отговор
в отговор на Blandings Castle #6

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

В клуба за Веб дизайн и HТМЛ получих вариант на това което си отговорил, но не толкова MS насочено - [линк]

Отговор