我有几个div
使用jQuery
可拖动的小s 。这些div
s 被放置在一个 中UpdatePanel
,并且在 dragstop 上我使用_doPostBack()
JavaScript 函数,在那里我从页面的表单中提取必要的信息。
我的问题是,当我调用这个函数时,整个页面都会重新加载,但我只想重新加载更新面板。
我有几个div
使用jQuery
可拖动的小s 。这些div
s 被放置在一个 中UpdatePanel
,并且在 dragstop 上我使用_doPostBack()
JavaScript 函数,在那里我从页面的表单中提取必要的信息。
我的问题是,当我调用这个函数时,整个页面都会重新加载,但我只想重新加载更新面板。
这是一个完整的解决方案
<form id="form1" runat="server">
<asp:LinkButton ID="LinkButton1" runat="server" /> <%-- included to force __doPostBack javascript function to be rendered --%>
<input type="button" id="Button45" name="Button45" onclick="javascript:__doPostBack('ButtonA','')" value="clicking this will run ButtonA.Click Event Handler" /><br /><br />
<input type="button" id="Button46" name="Button46" onclick="javascript:__doPostBack('ButtonB','')" value="clicking this will run ButtonB.Click Event Handler" /><br /><br />
<asp:Button runat="server" ID="ButtonA" ClientIDMode="Static" Text="ButtonA" /><br /><br />
<asp:Button runat="server" ID="ButtonB" ClientIDMode="Static" Text="ButtonB" />
</form>
Private Sub ButtonA_Click(sender As Object, e As System.EventArgs) Handles ButtonA.Click
Response.Write("You ran the ButtonA click event")
End Sub
Private Sub ButtonB_Click(sender As Object, e As System.EventArgs) Handles ButtonB.Click
Response.Write("You ran the ButtonB click event")
End Sub
向客户端呈现两个输入控件:
<input type="hidden" name="__EVENTTARGET" id="__EVENTTARGET" value="" />
<input type="hidden" name="__EVENTARGUMENT" id="__EVENTARGUMENT" value="" />
__EVENTTARGET
接收 __doPostBack 的参数 1__EVENTARGUMENT
接收 __doPostBack 的参数 2__doPostBack 函数呈现如下:
function __doPostBack(eventTarget, eventArgument) {
if (!theForm.onsubmit || (theForm.onsubmit() != false)) {
theForm.__EVENTTARGET.value = eventTarget;
theForm.__EVENTARGUMENT.value = eventArgument;
theForm.submit();
}
}
当表单提交/回发时:
javascript:__doPostBack('ButtonB','')
,则将运行该按钮的按钮单击处理程序。你可以将任何你想要的作为参数传递给 __doPostBack
然后,您可以分析隐藏的输入值并相应地运行特定代码:
If Request.Form("__EVENTTARGET") = "DoSomethingElse" Then
Response.Write("Do Something else")
End If
ClientIDMode="Static"
,那么你可以做这样的事情:__doPostBack('<%= myclientid.UniqueID %>', '')
。__doPostBack('<%= MYBUTTON.UniqueID %>','')
Per Phairoh:在页面/组件中使用它,以防面板名称更改
<script type="text/javascript">
<!--
//must be global to be called by ExternalInterface
function JSFunction() {
__doPostBack('<%= myUpdatePanel.ClientID %>', '');
}
-->
</script>
虽然 Phairoh 的解决方案在理论上似乎是合理的,但我也找到了另一个解决这个问题的方法。通过将 UpdatePanels id 作为参数(事件目标)传递给 doPostBack 函数,更新面板将回发,但不会回发整个页面。
__doPostBack('myUpdatePanelId','')
*注意:第二个参数用于添加事件参数
希望这有助于某人!
编辑:所以似乎在我打字时上面给出了同样的建议:)
__doPostBack
直接使用太2000了。任何在 2018 年编写 WebForms 的人都使用 GetPostBackEventReference
(更严重的是,添加这个作为完整性的答案。__doPostBack
直接使用是不好的做法(单下划线前缀通常表示私有成员,双下划线表示更通用的私有成员),尽管它可能不会改变或在此过时点。我们在ClientScriptManager.GetPostBackEventReference 中有一个完全支持的机制。)
假设您的 btnRefresh 位于我们的 UpdatePanel 内并导致回发,您可以像这样使用 GetPostBackEventReference(灵感):
function RefreshGrid() {
<%= ClientScript.GetPostBackEventReference(btnRefresh, String.Empty) %>;
}
如果有人对此有问题(就像我一样),您可以通过向按钮添加 UseSubmitBehavior="false" 属性来获取按钮的回发代码。如果您检查按钮的呈现源,您将看到您需要执行的确切 javascript。在我的情况下,它使用按钮的名称而不是 id。