ASP.Net AJAX UpdatePanel无法使用Repeater和RadioButtons

时间:2012-12-06 21:23:49

标签: asp.net ajax

我有一个转发器,每个项目都包含一个单选按钮,整个站点位于更新面板内。当我选择一个单选按钮时,整个页面会重新加载。为什么不只是更新更新面板。我把它简化为一个非常简单的例子,以避免混乱。代码在这里...

... 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();
    }
}

3 个答案:

答案 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)