Подтвердить что ты не робот

Как перехватить любую обратную передачу на странице? - ASP.NET

Я хочу перехватить любые обратные вызовы на текущей странице, прежде чем это произойдет. Я хочу сделать некоторые пользовательские манипуляции до того, как будет отправлена ​​обратная передача. Любые идеи, как это сделать?

4b9b3361

Ответ 1

Вот несколько вещей, которые вы можете сделать, чтобы перехватить обратную передачу на клиенте.

Функция __doPostBack выглядит следующим образом:

function __doPostBack(eventTarget, eventArgument) {
    if (!theForm.onsubmit || (theForm.onsubmit() != false)) {
        theForm.__EVENTTARGET.value = eventTarget;
        theForm.__EVENTARGUMENT.value = eventArgument;
        theForm.submit();
    }
}

Обратите внимание, что он вызывает "theForm.onsubmit()", прежде чем делать обратную передачу. Это означает, что если вы назначаете свою форму функции onsubmit javascript, она всегда будет вызываться перед каждой обратной передачей.

<form id="form1" runat="server" onsubmit="return myFunction()">

В качестве альтернативы вы можете фактически переопределить функцию __doPostBack и заменить ее на свой. Это старый трюк, который использовался в ASP.Net 1.0 дня.

var __original= __doPostBack;
__doPostBack = myFunction();

Это заменяет функцию __doPostBack вашим собственным, и вы можете вызвать оригинал из своего нового.

Ответ 2

Используйте следующие параметры

Все параметры работают с ajax-enabled-формы и простые формы.
return false to cancel submit in любой отправитель-отправитель.

Page.ClientScript.RegisterOnSubmitStatement(Page.GetType(), "submit-handler", "alert(\"On PostBack\");");

Эквивалентный javascript - не используйте этот код с предыдущим кодом одновременно

// Modify your form tag like this
<form onsubmit="javascript:return submit_handler();" ...>

// Add this script tag within head tag
<script type="text/javascript">
    function submit_handler() {
        // your javascript codes
        // return false to cancel
        return true; // it really important to return true if you don't want to cancel
    }
</script>

И если вы хотите, чтобы полный контроль над __doPostBack помещал этот script рядом с тегом формы

<script type="text/javascript">
    var default__doPostBack;
    default__doPostBack = __doPostBack;
    __doPostBack = function (eventTarget, eventArgument) {
        // your javascript codes
        alert('Bye __doPostBack');
        default__doPostBack.call(this, eventTarget, eventArgument);
    }
</script>

Протестировано с помощью ASP.NET 4.0

Ответ 3

Чтобы получить обратную передачу перед страницей, вы можете создать HttpHandler и реализовать функцию ProcessRequest.

Отметьте эту ссылку Scott Hanselman для хорошего сообщения в блоге о том, как это сделать (включая пример кода).

Ответ 4

Page.IsPostBack - ваш друг.

Ответ 5

Вы можете проверить обратную передачу в одном из событий страницы для своей формы.

Если вы хотите предпринять некоторые действия по обратной передаче, которая включает в себя создание элементов управления или управление представлением, то вы можете захотеть войти в более раннее событие, такое как Page_Init.

Попробуйте следующее:

protected void Page_Init(object sender, EventArgs e)
    {
        if (Page.IsPostBack)
        {
            //Check for your conditions here, 

            if (Page.IsAsync)
            {
                //also you may want to handle Async callbacks too:
            }
        }
    }

Ответ 6

не уверен, но я думаю, что вы ищете..

if (Page.IsPostBack)
    { 
    }