在回发ASP NET上未选中复选框

时间:2016-05-26 05:25:15

标签: c# asp.net checkbox postback

我有一个asp.net项目,让我们称之为对象。 所有对象都在转发器中创建:

<section class="topbar">
    <asp:Button runat="server" ID="btnSave" OnClick="btnSave_OnClick" Text="Save" />
</section>

<asp:Repeater runat="server" id="gwList">
    <ItemTemplate>
        <div class="block">
            <input type="checkbox"  runat="server" ID="chkObjectSelected" value='<%# ((Object.Object)Container.DataItem).Id %>'/> 

            <label><%# ((Object.object)Container.DataItem).Title %></label>

        </div>
    </ItemTemplate>
</asp:Repeater>

问题出现了,所有选定的对象都不会在回发中设置为选中状态。这是我用来确定是否检查对象的代码:

protected void btnSave_OnClick(object sender, EventArgs e)
{   
    List<string> objectIdSelected = new List<string>(); 

    foreach (RepeaterItem oneObject in gwList.Items)
    {
        HtmlInputCheckBox chkObj = (HtmlInputCheckBox)carAd.FindControl("chkObjectSelected");

        if (chkObj.Checked)
        {
            objectIdSelected.Add(chkObj.Value.ToString());
        }
    }
}

2 个答案:

答案 0 :(得分:2)

尝试替换

<input type="checkbox"  runat="server" ID="chkObjectSelected" value='<%# ((Object.Object)Container.DataItem).Id %>'/> 

用这个

 <asp:CheckBox runat="server" ID="chkObjectSelected" Value='<%# ((Object.Object)Container.DataItem).Id %>'/> 

并将您的代码更改为:

protected void btnSave_OnClick(object sender, EventArgs e)
{
    List<string> objectIdSelected = new List<string>();

    foreach (RepeaterItem oneObject in gwList.Items)
    {
        CheckBox chkObj = (CheckBox)oneObject.FindControl("chkObjectSelected");

        if (chkObj.Checked)
        {
            objectIdSelected.Add(chkObj.Attributes["Value"].ToString());
        }
    }
}

答案 1 :(得分:1)

在Page_Load事件中的逻辑周围放置一个“!Page.IsPostback”条件。可能发生的是您的按钮导致回发,并且page_load会在按钮单击事件触发之前重新加载默认(未选中)值。