Autopostback и конфликт doPostBack - PullRequest
       71

Autopostback и конфликт doPostBack

0 голосов
/ 08 сентября 2010

Я включил свойство AutoPostBack в одном из текстовых полей моей формы, которое согласно w3 школам должно вызывать обратную передачу только при нажатии клавиши ввода или ввода.

Я также вызываю __doPostBack() на pageLoad, учитывая ответ пользователя на приглашение javascript. Когда я это делаю, Request.Form['__EventTarget'] - это не то, что я установил в вызове на __doPostBack.

Реальная проблема для меня заключается в том, что если я установил для атрибута AutoPostBack TextBox значение false, проблема с вызовом pageload __doPostBack исчезнет. Это не поведение, которое я ожидал. Любые идеи о том, что вызывает проблему? Почему включенный AutoPostBack оказал какое-либо влияние?

Вот часть кода:

asp:TextBox runat="server" ID="userName" OnTextChanged="UpdateTable" AutoPostBack="true"
script type="text/javascript"
        //![CDATA[
        var theForm = document.forms['form1'];
        if (!theForm) {
            theForm = document.form1;
        }
        function __doPostBack(eventTarget, eventArgument) {
            if (!theForm.onsubmit || (theForm.onsubmit() != false)) {
                theForm.__EVENTTARGET.value = eventTarget;
                theForm.__EVENTARGUMENT.value = eventArgument;
                theForm.submit();
            }
        }
        //]]
/script
input type="hidden" name="__EVENTTARGET" id="__EVENTTARGET" value=""
input type="hidden" name="__EVENTARGUMENT" id="__EVENTARGUMENT" value=""
input type="hidden" name="__LASTFOCUS" id="__LASTFOCUS" value="" 
function jsPrompt(name) {
  var ans = confirm('really follow ' + name + '?');
  if (ans) {
    __doPostBack('follow', name);
  }
}

Затем на странице кода:

if (Request.Form["__EventTarget"] == "follow")
  followPerson(Request.Form["__EventArgument"]);                

Но я все время получаю, что Request.Form["__EventTarget"] равно ",", и я прошелся по javascript в отладчике. Непосредственно перед form.submit() аргументы не ","

Ответы [ 2 ]

1 голос
/ 09 сентября 2010

ОК ... с чего начать.Что именно вы пытаетесь достичь здесь?Я не могу придумать ни одной законной причины взглянуть на Request.Form ["__ EventTarget"] в ASP.NET.Единственный раз, когда я видел это, когда программист ASP или PHP старой школы впервые изучает ASP.NET и не совсем понял модель, управляемую событиями, которая лежит в основе ASP.NET.

Кроме того, что вызначит, когда вы говорите, что вызываете __doPostBack ()?Вам также не нужно делать это вручную.Если вы действительно хотите создать обратную передачу в javascript, где это обычно не происходит, вам нужно использовать ClientScriptManager.GetPostBackEventReference ().Итак, используйте этот метод и передайте ему свой TextBox, чтобы получить правильный код обратной передачи.Затем вы можете выполнить его в любом месте вашего скрипта на стороне клиента.

Надеюсь, это поможет.Если я неправильно понял сценарий, добавьте комментарий, и я попробую еще раз.:)

0 голосов
/ 08 сентября 2010

Где код, который вы используете?Убедитесь, что вы используете что-то вроде:

var element = $get("<%= textbox1.ClientID %>");
__doPostBack(element.name, ''); // second param is command name/argument separated by $

HTH.

...