【问题标题】:__doPostBack not working for me__doPostBack 不适合我
【发布时间】:2011-08-11 20:28:24
【问题描述】:

我使用 __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的使用出错了。

我关注了这个帖子:Call ASP.NET function from JavaScript?

【问题讨论】:

  • 附带说明,您想获得这条路线的任何具体原因。为什么不使用 Jquery 中的 PageMethods (weblogs.asp.net/mschwarz/archive/2008/01/08/…) 和相关的东西?
  • 你有没有机会在页面的 URL 中有字符串“alert”?

标签: javascript asp.net dopostback


【解决方案1】:

把你的代码改成这样:

setTimeout(function () { __doPostBack('btnSave', '') }, 500);

使用btnSave Id。它适用于所有浏览器。

【讨论】:

    【解决方案2】:

    对我来说,_dopostback() 不仅仅在 IE 和 chrome 浏览器上触发。我已经通过添加“return false;”来解决javascript函数中的语句。例如:-

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

    现在它工作正常。

    【讨论】:

      【解决方案3】:

      我也关注了你提到的同一篇文章并得到了一个错误,我尝试在这里使用其他答案但它仍然没有用。

      直到我找到这篇文章: http://forums.asp.net/t/1197643.aspx (看NC01的第8条回复)。

      1.基本上这个想法是你的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. 在 page_load 的 .cs 中添加以下行:

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

      4.别忘了实现接口:

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

      你猜怎么着——它甚至可以工作!

      @Subhash Dike - PageMethods 仅适用于静态方法,AFAIK。

      【讨论】:

      • 虽然理论上这可以回答这个问题,it would be preferable 在这里包含答案的基本部分,并提供链接以供参考。
      【解决方案4】:

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

      【讨论】:

        【解决方案5】:

        将以下脚本放在 html 文件的标题部分:

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

        【讨论】:

          猜你喜欢
          • 2011-01-05
          • 2011-12-23
          • 2012-04-01
          • 2011-05-02
          • 2012-12-07
          • 2012-05-04
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多