我有一个转发器,每个项目都包含一个单选按钮,整个站点位于更新面板内。当我选择一个单选按钮时,整个页面会重新加载。为什么不只是更新更新面板。我把它简化为一个非常简单的例子,以避免混乱。代码在这里...
... ASPX
<asp:ScriptManager ID="SM1" runat="server" />
<asp:UpdatePanel ID="up1" runat="server" UpdateMode="Conditional">
<ContentTemplate>
<asp:Repeater runat="server" ID="history">
<ItemTemplate>
<asp:RadioButton runat="server" ID="radioButton" AutoPostBack="true" GroupName="HistoryGroup" OnCheckedChanged="RadioButton_CheckChanged" /><br />
</ItemTemplate>
</asp:Repeater>
<p><asp:Literal runat="server" ID="output" /></p>
</ContentTemplate>
</asp:UpdatePanel>
...代码
public partial class _Default : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
if (!Page.IsPostBack)
{
List<int> list = new List<int>();
for (int i = 0; i < 20; i++)
list.Add(i);
history.DataSource = list.ToArray();
history.DataBind();
}
}
protected void RadioButton_CheckChanged(Object sender, EventArgs e)
{
output.Text = DateTime.Now.ToString();
}
}
答案 0 :(得分:3)
在RadioButton上设置ClientIDMode = Auto应该修复它(这是一个臭名昭着的.NET bug,http://connect.microsoft.com/VisualStudio/feedback/details/584991/clientidmode-static-in-updatepanel-fails-to-do-async-postback)
答案 1 :(得分:0)
请在output.Text = DateTime.Now.ToString()之后添加up1.Update()。您的RadioButton不是updatepanel的触发器
答案 2 :(得分:0)
原来解决方案是从RadioButton中删除GroupName。当我删除此标记时,它会异步触发并只更新面板。我实际上并不需要这个标签(由于已知的错误,其中GroupName不能在Repeater中的RadioButtons上工作),因为我在click事件中处理分组(即取消选中其他转发器项目中任何其他同名的RadioButtons)