我在SO中找不到类似的东西。
在ASP.NET中,有没有什么方法可以在UpdatePanel中使用Javascript进行部分回发?
我试过了__doPostBack()
,但它做了一个完整的回发
我可以用一个虚拟按钮欺骗它并点火click()
然后处理部分回发,但我想要一种比欺骗更优雅的方式。
感谢。
编辑:我发现这个disturbedbuddha.wordpress.com/2007/11/26/ ...但我无法让它工作=(
我希望这种方法能够发挥作用;这对我来说很完美!
到目前为止,我使用最后一种方法可以做的是对定时器的增益参考。最初禁用计时器,启动计时器似乎不会导致回发。但是,如果没有Ajax,如果我只是最初启用了计时器,那么它会以一定的间隔发回,就好了;为什么Ajax调用不能导致它?
答案 0 :(得分:33)
您可以将AsyncPostBackTrigger与UpdatePanel一起使用来执行此操作。因为你需要一些可以触发事件的东西,所以使用按钮非常简单,当隐藏时效果很好。
如果这是你的标记:
<asp:UpdatePanel ID="UpdatePanel1" runat="server" OnLoad="UpdatePanel1_Load">
<ContentTemplate>
<!-- Contents... -->
</ContentTemplate>
<Triggers>
<asp:AsyncPostBackTrigger ControlID="ReloadThePanel" EventName="Click" />
</Triggers>
</asp:UpdatePanel>
<asp:Button ID="ReloadThePanel" runat="server" style="display:none;" />
当您想要更新面板时,您只需要致电:
__doPostBack('<%=ReloadThePanel.ClientID %>', null);
这将使ASP.NET认为单击了ReloadThePanel,并且由于触发器而自动生成的JavaScript将处理其余部分。
修改强>
您可以在没有任何触发器或隐藏按钮的情况下对UpdatePanel执行纯JavaScript更新。您只需要使用客户端ID作为第一个参数调用__doPostBack
。
__doPostBack('<%=UpdatePanel1.ClientID %>', null);
答案 1 :(得分:2)
我使用了@ MatthewJacobs&#39;回答,但我发现对__doPostBack
的调用在IE11上引起了运行时异常。我发现对__doPostBack
的调用可以替换为以下JavaScript调用,该调用适用于我测试的两个浏览器(IE11和Chrome 52)。
Sys.WebForms.PageRequestManager.getInstance().beginAsyncPostBack(
[ '<%=UpdatePanel1.ClientID %>' ], '<%=UpdatePanel1.ClientID %>', null
);
有关详细信息,请参阅Sys.WebForms.PageRequestManager.beginAsyncPostBack Method。
答案 2 :(得分:0)
对我有用的解决方案
ASPX
<script>
function myfunc(){
__doPostBack('<%=UpdatePanel2.ClientID%>', "");
}
</script>
<asp:UpdatePanel ID="UpdatePanel2" runat="server" OnLoad="UpdatePanel1_Load">
</asp:UpdatePanel>
.cs
protected void UpdatePanel1_Load(object sender, EventArgs e)
{
if (IsPostBack)
{
//your code
}
}