【问题标题】:how can I reload an update panel onclient side using javascript?如何使用 javascript 在客户端重新加载更新面板?
【发布时间】:2009-05-27 17:00:17
【问题描述】:

我有一个以编程方式创建的 gridview 按钮,我想在客户端加载一个带有发送数据的更新面板。我有一个隐藏的值字段,通过单击 gridview 按钮获取其数据,并且我的更新面板中的下拉列表取决于该值。

【问题讨论】:

    标签: asp.net javascript vb.net visual-studio-2008 updatepanel


    【解决方案1】:

    虽然直接调用 __doPostBack 会起作用,但这并不是一个完美的解决方案,因为该函数的名称严格来说是 .Net 框架的实现细节。

    更好的解决方案是使用ClientScriptManager.GetPostBackEventReference,它为您提供了对相同功能的更具弹性的界面。请注意,GetPostBackEventReference 和 GetCallBackEventReference 不是一回事 - 前者会导致页面重新加载(部分或全部,取决于您的 UpdatePanel 的设置方式),而后者不会。

    【讨论】:

    • 我不确定我是否了解如何使用它。这是我的尝试: btnedit.OnClientClick = ClientScript.GetCallbackEventReference(UpdatePanel1, "", "", "") & String.Format("openModal('{0}','" & GridView1.Rows(i).Cells( 0).Text & "');return false;", hidden.ClientID) 我不知道该放什么参数。
    • 我已经编辑了我的答案,指出您可能想要回发而不是回调。
    • 我对你想要做的事情有点困惑 - 用户是否对 openModal() 的结果做了一些事情,并且在他们完成之后你希望列表框重新绑定?
    【解决方案2】:

    最简单的方法是从客户端调用 __doPostBack。

    在客户端 button1_onclick 方法,调用:

    __doPostBack('<%=UpdatePanel1.ClientID %>','Refresh:0,1,2');    //refresh update panel
    

    在页面后面添加以下事件处理程序以捕获回发调用:

    protected void UpdatePanel1_Load(object sender, EventArgs e)
    {
        string arg = Request.Form["__EVENTARGUMENT"];
    
        if (string.IsNullOrEmpty(arg)) return;
    
        if (arg.StartWith("Refresh")
        {
             //parse data first then do your thing here...
        }
    }
    

    当然不要忘记将事件连接到上述方法:

    protected void Page_Init(object sender, EventArgs e)
    {           
        UpdatePanel1.Load += new EventHandler(UpdatePanel1_Load);
    }
    

    【讨论】:

      【解决方案3】:

      我们使用 __dopostback() 方法来模拟回发并导致更新面板刷新

      __doPostBack('controlName','');
      

      不要忘记控件名称是它的 HTML ID(很可能包含美元等),而不仅仅是它的 ASP.NET ID。

      据我所知,您可以调用此方法并传入隐藏值字段或它所在的 div。

      【讨论】:

      • 我试着这样称呼它 __doPostBack('','');那是如何调用方法吗?
      • 我知道不是每个人都喜欢 _doPostBack,但请解释为什么这是不好的做法。这是一种公认​​的做法并被广泛使用,使用它的所有负面影响,例如 _doPostBack 被弃用的可能性,都是没有根据的。
      猜你喜欢
      • 1970-01-01
      • 2017-10-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-09-11
      • 2011-04-12
      • 2018-11-24
      • 1970-01-01
      相关资源
      最近更新 更多