我启用了某个表单文本框的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()
之前,参数不是","
答案 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。