我有几个使用jQuery
可拖动的小div
s。这些div
被放置在UpdatePanel
中,并且在阻力停止时使用了_doPostBack()
JavaScript函数。在那里我从页面表单中提取必要的信息。ASP.NET使用JavaScript回发
我的问题是,当我调用这个函数整个页面被重新加载,但我只想要更新面板被重新加载。
我有几个使用jQuery
可拖动的小div
s。这些div
被放置在UpdatePanel
中,并且在阻力停止时使用了_doPostBack()
JavaScript函数。在那里我从页面表单中提取必要的信息。ASP.NET使用JavaScript回发
我的问题是,当我调用这个函数整个页面被重新加载,但我只想要更新面板被重新加载。
这里是一个完整的解决方案的asp.net页面 的
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
<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>
两个输入控件呈现给客户端:
<input type="hidden" name="__EVENTTARGET" id="__EVENTTARGET" value="" />
<input type="hidden" name="__EVENTARGUMENT" id="__EVENTARGUMENT" value="" />
__EVENTTARGET
接收__doPostBack__EVENTARGUMENT
参数1接收的__doPostBack的__doPostBack函数参数2呈现出像这个:
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 %>','')
+1为完整性。那种让我爱StackOverflow的好回答。 – 2012-04-13 09:07:05
这是我见过的__doPostBack().. +10的最好解释之一! – GuruC 2012-12-07 07:12:46
@BrianWebster,非常感谢您的详细信息。我可以建议任何仍然使用C#而不是VB.NET的ASP.NET 3.5及更低版本的人将.aspx文件中的最后两行更改为以下内容: 的
的
您不能致电_doPostBack()
,因为它强制形式的子级。你为什么不禁用UpdatePanel
上的PostBack
?
我需要AJAX的更新面板。 – ErnieStings 2009-08-20 12:53:10
一个问题。当div被拖动时,_doPostBack由您自动调用还是由ASP.NET自动调用? – 2009-08-20 12:55:45
它由我通过javascript调用 – ErnieStings 2009-08-20 13:01:54
首先,不要使用更新面板。他们是微软为Web开发者创造的第二个最邪恶的东西。
其次,如果您必须使用更新面板,请尝试将UpdateMode属性设置为条件。然后添加一个触发器到您添加到页面的Asp:Hidden控件。将更改事件分配为触发器。在您的dragstop事件中,更改隐藏控件的值。
这是未经测试的,但理论听起来似乎...如果这不起作用,你可以尝试与asp:按钮相同的东西,只需设置display:none样式并使用click事件代替变化事件。
微软为web开发人员创建的第一个最邪恶的东西是什么? – ErnieStings 2009-08-20 13:16:38
登录控件在该列表中必须非常高。 – kim3er 2009-08-20 13:19:58
@ErnieStings:IE6 – phairoh 2009-08-20 14:40:03
您是否尝试将更新面板的客户端ID传递给__doPostBack函数?据我所知,我的团队已经完成了刷新更新面板的工作。
__doPostBack(UpdatePanelClientID, '**Some String**');
尽管Phairoh的解决方案在理论上看起来很合理,但我也发现了另一个解决此问题的方法。通过将UpdatePanels ID作为参数(事件目标)传递给doPostBack函数,更新面板将回发但不是整个页面。
__doPostBack('myUpdatePanelId','')
*注:第二个参数是除了事件参数
希望这可以帮助别人!
编辑:看起来是这样上面我打字:)被赋予此相同的忠告
这会起作用,而且我在应用程序中做了类似的事情,但它确实不是一个好主意,我讨厌当我这样做时我必须这样做。如果更新面板的名称发生更改,则会中断。如果你曾经把它放在一个用户控件中,它就会中断。如果你添加一个母版页,它会中断。是的,但它很脆弱。至少,请使用更新面板的ClientId属性而不是静态字符串。 – phairoh 2009-08-20 14:43:06
请注意'__doPostBack('','')'也适用。 – ErikusMaximus 2018-02-28 20:27:23
每Phairoh:在页面使用此/组件,以防万一面板名称更改
<script type="text/javascript">
<!--
//must be global to be called by ExternalInterface
function JSFunction() {
__doPostBack('<%= myUpdatePanel.ClientID %>', '');
}
-->
</script>
如果任何人有这个麻烦(因为我),你可以得到通过将UseSubmitBehavior =“false”属性添加到按钮的回发代码。如果你检查按钮的呈现源,你会看到你需要执行的确切的JavaScript。在我的情况下,它使用的是按钮的名称而不是id。
Very使用母版页时很有用。 – DCastenholz 2014-06-19 00:09:52
__doPostBack似乎总是在使用母版页时使用该按钮的名称。 – 2014-07-07 23:54:52
你的div都有唯一的ID吗? – 2009-08-20 12:58:17