Autopostback和doPostBack冲突

时间:2010-09-08 18:22:14

标签: c# asp.net postback autopostback dopostback

我启用了某个表单文本框的AutoPostBack属性,根据w3 schools,只有当我按下回车符或制表符时才会触发回发。

我还在pageLoad上调用了__doPostBack(),给出了用户对javascript提示的回答。当我这样做时,Request.Form['__EventTarget']不是我在调用__doPostBack时设置的内容。

对我来说真正的问题是,如果我将TextBox的AutoPostBack属性设置为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 个答案:

答案 0 :(得分:1)

好的......从哪里开始。你究竟想在这里完成什么?我认为在ASP.NET中查看Request.Form [“__ EventTarget”]是没有正当理由的。我唯一一次看到这个问题的时候,一个老式的ASP或PHP程序员首次学习ASP.NET,并且还没有完全掌握构成ASP.NET的事件驱动模型。

另外,当你说你正在调用__doPostBack()时,你的意思是什么?您也不需要手动执行此操作。如果你真的想在javascript中创建一个通常不会发生的回发,你需要使用ClientScriptManager.GetPostBackEventReference()。因此,使用此方法并将其传递给TextBox以获取正确的回发代码。然后,您可以在客户端脚本的任何位置执行它。

希望这会有所帮助。如果我误解了这个场景,请添加评论,我会再试一次。 :)

答案 1 :(得分:0)

您使用的代码在哪里?确保您使用的是:

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

HTH。