【问题标题】:ASP.NET checkbox value when postback inside of an repeater在转发器内回发时的 ASP.NET 复选框值
【发布时间】:2016-06-21 23:33:19
【问题描述】:

我有一个ASP Repeater,其中包含一个标签列表,我想看看哪个标签被选中(选中)。

喜欢:

<HeaderTemplate>
        <ul class="tags-list">
    </HeaderTemplate>
    <ItemTemplate>
        <asp:CheckBox ID="tag" runat="server" AutoPostBack="true" Text='' />
    </ItemTemplate>
    <FooterTemplate>
        </ul>
    </FooterTemplate>
</asp:Repeater>

我面临的问题是

protected override void InitializeControls(Telerik.Sitefinity.Web.UI.GenericContainer container, Telerik.Sitefinity.Web.UI.ContentUI.Contracts.IContentViewDefinition definition)

方法在 and 之前被触发:

    void tagList_ItemDataBound(object sender, RepeaterItemEventArgs e)
    {
        if (e.Item.ItemType == ListItemType.AlternatingItem || e.Item.ItemType == ListItemType.Item)
        {
            var item = e.Item.DataItem as Taxon;
            var checkbox = e.Item.FindControl("tag") as CheckBox;
            checkbox.Text = item.Title;
            checkbox.CheckedChanged += new EventHandler(this.checkbox_Changed);

        }
    }

在我的回调方法之前每次都会被触发:

protected void checkbox_Changed(object sender, EventArgs e)
{
    CheckBox tagCheckbox = (CheckBox)sender;

    if (tagCheckbox.Checked)
    {

    }
}

谁能指导我获取复选框状态的最佳做法是什么?

【问题讨论】:

  • tagList_ItemDataBound 如果您在没有 !ispostback 的情况下在 page_load 中对转发器进行数据绑定,则会被触发
  • @Emre:好的,谢谢!但是我如何获得复选框状态?设置数据绑定条件将使 tagList.Items.Count == 0。
  • 是否必须在 itemdatabound 中设置 eventhandler?你为什么不在你的复选框中使用OnCheckedChanged="checkbox_Changed"
  • @Emre:对不起,我想我没明白你的意思。事件处理程序以编程方式设置在tagList_ItemDataBound
  • 我的意思是你为什么不使用&lt;asp:CheckBox ID="tag" runat="server" AutoPostBack="true" Text='' OnCheckedChanged="checkbox_Changed"/&gt;

标签: asp.net checkbox repeater sitefinity sitefinity-5


【解决方案1】:

您可以尝试在转发器内的复选框控件中定义“CheckedChanged”方法吗:

<asp:CheckBox ID="tag" runat="server" AutoPostBack="true" Text='' CheckedChanged="checkbox_Changed" />

那么您不必担心将处理程序绑定在代码后面。如果您没有获得正确的复选框状态,还请确保您在页面属性中有“EnableViewState”。

希望对您有所帮助,如果我误解了这个问题,请告诉我

【讨论】:

    【解决方案2】:

    我有相当肮脏的解决方案。我的问题是在转发器中触发复选框的回发,但我还需要记录的 ID。 归档 ID 的最佳方法是使用 ValidationGroup 属性:

    <asp:CheckBox ValidationGroup='<%# DataBinder.Eval(Container.DataItem,"id") %>' ID="YOUR_ID" runat="server" AutoPostBack="true" OnCheckedChanged="checkbox_Changed" />
    

    在后面的代码中:

    CheckBox theCheckBox = (CheckBox)sender; 
    int id = Convert.ToInt16(theCheckBox.ValidationGroup);
    

    如果有人有同样的需求,可以使用这个解决方案。

    【讨论】:

      猜你喜欢
      • 2010-12-04
      • 2011-12-11
      • 1970-01-01
      • 1970-01-01
      • 2012-01-06
      • 2012-01-16
      • 2014-08-23
      • 1970-01-01
      • 2012-03-18
      相关资源
      最近更新 更多