__doPostBack对我无效

4

我使用 __doPostBack 的方式是否有错误?

function displaymessage() {
  var scl = "aaaaaa";
  var pageId = '<%=  Page.ClientID %>';
  __doPostBack(pageId, 'OtherInformation');
  alert(scl);
}

<input type="button" value="Click me!" id="Button2" onclick="displaymessage()"   />

当我按下按钮时,它应该调用代码文件中的RaisePostBackEvent,但实际上并没有。如果我注释掉doPostBack,它会到达警报,但是当取消注释时就不行了。因此,一定是在使用doPostBack时出现了错误。
我遵循了这篇文章:如何从JavaScript调用ASP.NET函数?

顺便问一下,你想获取这条路线的具体原因是什么?为什么不使用PageMethods(http://weblogs.asp.net/mschwarz/archive/2008/01/08/how-to-move-from-ajaxpro-to-asp-net-ajax-pagemethods.aspx)以及Jquery相关功能呢? - Subhash Dike
页面的URL中有字符串“alert”的可能性吗? - jvanstry
6个回答

2

对于我来说,_dopostback() 只在IE和Chrome浏览器上没有触发。我通过在javascript函数中添加 "return false;" 语句来解决这个问题。例如:

  function test()
{
    _dopostback("logout","");
return false;
}

现在它正常工作。


2
将以下脚本放置在您的HTML文件的头部部分:
```html

将以下脚本放置在您的HTML文件的头部部分:

```
<script>
    function __doPostBack(eventTarget, eventArgument) {
        document.Form1.__EVENTTARGET.value = eventTarget;
        document.Form1.__EVENTARGUMENT.value = eventArgument;
        document.Form1.submit();
    }
</script>

1
将您的代码更改为以下内容:
setTimeout(function () { __doPostBack('btnSave', '') }, 500);

使用 btnSave Id。在所有浏览器中都有效。

0

我也按照你提到的帖子操作,但是出现了错误,我尝试使用这里的其他答案,但仍然无法解决。

直到我找到了这篇文章: http://forums.asp.net/t/1197643.aspx (看看NC01在第8个回复中说的内容)。

基本上,想法是你的aspx应该有类似于这样的东西:

<script type="text/javascript" language="javascript">
  function myfunction() {

              if ('<%=Page.IsPostBack%>' == 'False') {
                 var pageId = '<%= this.UniqueID %>';
                  __doPostBack(pageId, 'do_something_good');
              }
          }
</script>

2. 然后在您的 .cs 文件中,您应该添加接口 IPostBackEventHandler(例如:)

public partial class _default : System.Web.UI.Page, IPostBackEventHandler

3.并在您的.cs文件中的page_load函数中添加此行代码:

this.ClientScript.GetPostBackEventReference(this, string.Empty);

4.不要忘记实现接口:

public void RaisePostBackEvent(string eventArgument)
  {
   if (eventArgument == "do_something_good")
   {
    //bla
   }
  }

猜猜看 - 它甚至还能工作!

@Subhash Dike - 据我所知,PageMethods仅适用于静态方法。


虽然这可能在理论上回答了问题,但最好在这里包含答案的重要部分,并提供引用链接。参考链接 - oers

0
在您的<%Page标签中添加EnableEventValidation="false"以解决__doPostBack问题。

0

__doPostBack的第二个参数('OtherInformation')中删除它,并用空字符串''替换。如果需要,您可以将该数据放入隐藏的输入字段中,并使用Request.Form检索它。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接