C# UpdatePanel重新加载窗体
我有一个ascx,看起来像这样:C# UpdatePanel重新加载窗体,c#,asp.net,C#,Asp.net,我有一个ascx,看起来像这样: <UpdatePanel Parent mode = Conditional> <UpdatePanel1 mode = Conditional> //A form here with textboxes, etc //A repeater here with a linkbutton that causes a postback </UpdatePanel1> </UpdatePanel P
<UpdatePanel Parent mode = Conditional>
<UpdatePanel1 mode = Conditional>
//A form here with textboxes, etc
//A repeater here with a linkbutton that causes a postback
</UpdatePanel1>
</UpdatePanel Parent>
<tr>
<td>
<asp:checkbox id="chkSelect" runat="server" />
<asp:label text="Something" runat="server" />
<asp:textbox id="txtSomething" runat="server" />
</td>
</tr>
<tr>
<td>
<asp:checkbox id="chkSelect2" runat="server" />
<asp:label text="Something2" runat="server" />
<asp:textbox id="txtSomething2" runat="server" />
</td>
</tr>
//这里有一个带有文本框等的表单
//这里的中继器有一个链接按钮,可以引起回发
在中继器的OnItemCommand中,我获取表单值并设置它们。它工作正常,但会重新渲染窗体(即,窗体消失并重新出现的闪烁)。考虑到我在UpdatePanel中有它,为什么会发生这种情况
编辑:
通过将表单和repeater分离到不同的UpdatePanel中,我似乎已经解决了一半的问题。但是,现在的问题是,当我单击中继器中的链接按钮时,即使服务器端代码运行,表单也不会得到更新。
再次编辑:
我想我知道发生了什么。在确定这一点之前,我有一个问题(希望如此)。表单如下所示:
<UpdatePanel Parent mode = Conditional>
<UpdatePanel1 mode = Conditional>
//A form here with textboxes, etc
//A repeater here with a linkbutton that causes a postback
</UpdatePanel1>
</UpdatePanel Parent>
<tr>
<td>
<asp:checkbox id="chkSelect" runat="server" />
<asp:label text="Something" runat="server" />
<asp:textbox id="txtSomething" runat="server" />
</td>
</tr>
<tr>
<td>
<asp:checkbox id="chkSelect2" runat="server" />
<asp:label text="Something2" runat="server" />
<asp:textbox id="txtSomething2" runat="server" />
</td>
</tr>
单击linkbutton时,我所关心的只是只更新textbox控件。我希望其他一切都保持原样
有没有办法只在这些控件上有条件地触发更新
我知道我可以使用JS,但我宁愿避免使用它(因为在我知道文本框的值之前,有很多服务器端处理)
@Roselberg-我不感兴趣的控件的状态实际上是在客户端的一个巨大的JS脚本中设置的,该脚本在加载时运行,我对脚本没有太多的控制权如果您只想有条件地更新文本框,那么您需要将它们放在自己的更新面板中。确保那些UpdatePanel是由链接按钮触发的,并且一切正常 虽然我不太清楚你说的是什么意思 我希望其他一切都保持不变 他们是这样的
只有在回发期间有代码更改复选框和标签时,复选框和标签才会更改。ASP.NET AJAX的体系结构实际上覆盖了UpdatePanel中的整个html。它不会单独更新值。基本上,有三种选择:
- 将文本框和复选框放在单独的更新面板中。看起来这对你的场景不起作用
- 确保在回发时传输值,以确保控件保持相同的显示。它们实际上会被覆盖,但如果它们被相同的值覆盖,这应该不会被注意到
- 使用不同的AJAX方法调用处理程序,而不是使用ASP.NET AJAX进行这些调用。使用javascript调用处理程序,然后单独更新值,而不是像ASP.NET AJAX那样替换控件。使用or很容易做到这一点