0

我将这些隐藏的输入字段添加到面板中:

foreach (Object obj in Objects)
{
    HiddenField hf = new HiddenField();
    hf.Value = "";
    hf.ID = "categoria" + obj.ID;
    panelCategorieGuida.Controls.Add(hf);
}

但是,在每个隐藏字段周围,我需要添加以下代码:

<div class="option-box"><a href="javascript:void(0);" class="option-box-item">&nbsp;</a>
    <span class="option-box-testo">Hello</span>
    <!-- HERE I NEED TO PUT THE HIDDEN FIELD i, so think to this whole option-box item into a cycle -->
</div>

我想避免写Literal在cs上并将它们添加到面板中。

你能给我什么建议?

4

3 回答 3

2

您可以使用中继器控件,标记:

<asp:Repeater ID="catRep" runat="server" onitemcreated="catRep_ItemCreated">
  <ItemTemplate>
    <div class="option-box"><a href="javascript:void(0);" class="option-box-item">&nbsp;</a>
      <span class="option-box-testo">Hello</span>
      <asp:PlaceHolder ID="hiddenPlaceHolder" runat="server"></asp:PlaceHolder>          
    </div>
  </ItemTemplate>
</asp:Repeater>

后面的代码:

protected void catRep_ItemCreated(object sender, RepeaterItemEventArgs e)
{
  Control placeHolder = e.Item.FindControl("hiddenPlaceHolder");
  if (placeHolder != null)
  {
    MyItemClass my = (MyItemClass)e.Item.DataItem;
    HiddenField hf = new HiddenField();
    hf.Value = "";
    hf.ID = "categoria" + my.ID;
    placeHolder.Controls.Add(hf);
  }
}

当然,您必须将转发器与对象列表绑定

于 2012-05-07T14:29:10.053 回答
1

您可以像这样使用 HtmlGenericControl ..

HtmlGenericControl div = new HtmlGenericControl("div");
div.Attributes.Add("class", "option-box");

HtmlGenericControl a = new HtmlGenericControl("a") { InnerText = "&nbsp;" };
a.Attributes.Add("href", "javascript:void(0);");
a.Attributes.Add("class", "option-box-item");

HtmlGenericControl span = new HtmlGenericControl("span") { InnerText = "Hello" };
a.Attributes.Add("class", "option-box-testo");

div.Controls.Add(a);
div.Controls.Add(span);
div.Controls.Add(hf);
于 2012-05-07T14:07:35.117 回答
0

如果你一遍又一遍地需要这种东西,你可能应该考虑把它变成一个用户控件,这样你就可以简单地编写你需要的代码,然后重用它,而不用担心它周围需要什么。此时,您可以将隐藏字段设置为您需要的任何内容,并稍后以编程方式访问它。

或者,更好的是,考虑Microsoft MVC是否合适,并在其中制作类似的东西作为可替换视图。

根据评论进行编辑:您并不太清楚需要如何使用它,因此在我对您对隐藏字段的使用做出很多假设的情况下,这是一个粗略的尝试。

<%@ Control Language="C#" AutoEventWireup="true" CodeBehind="test.ascx.cs" Inherits="stuff.test" %>
<div class="option-box"><a href="javascript:void(0);" class="option-box-item">&nbsp;</a>
    <span class="option-box-testo">Hello</span>
    <asp:label id="label1" runat="server" visible="false"/>
</div>

然后在代码隐藏中插入:

    public Label HiddenField
    {
        get { return (Label)FindControl("label1"); }
    }

从那里您可以添加尽可能多的这些控件,无论您在使用什么,都可以随意调用,然后使用类似的 FindControl 调用(或者如果您需要多次调用,则将它们放在 NamingContainer 中,请参阅这篇文章以了解如何做到这一点 在您拥有使用它的用户控件后,您只需执行 UserControl.HiddenField.Text 即可获得您要查找的标签。

这样做的最大假设是,这些隐藏字段都必须在总体上孤立地处理——这是你的 ForEach 给我的印象,因为你似乎在处理每一个字段,但彼此独立。如果所有这些事情都必须根据彼此的值来处理,那么您最好还是使用中继器的建议。

于 2012-05-07T14:11:49.897 回答