我将这些隐藏的输入字段添加到面板中:
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"> </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>
我想避免在cs上写Literal
并将其添加到面板中。
你能告诉我什么?
答案 0 :(得分:2)
您可以使用Repeater控件,标记:
<asp:Repeater ID="catRep" runat="server" onitemcreated="catRep_ItemCreated">
<ItemTemplate>
<div class="option-box"><a href="javascript:void(0);" class="option-box-item"> </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);
}
}
当然,你必须将转发器绑定到对象列表
答案 1 :(得分:1)
您可以像这样使用HtmlGenericControl ..
HtmlGenericControl div = new HtmlGenericControl("div");
div.Attributes.Add("class", "option-box");
HtmlGenericControl a = new HtmlGenericControl("a") { InnerText = " " };
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);
答案 2 :(得分:0)
如果你一遍又一遍地需要这种东西,你应该考虑将它变成user control,这样你就可以简单地编写你需要的东西,然后重复使用它,而不用担心它需要什么。此时,您可以将隐藏字段设置为您需要的任何内容,并稍后以编程方式访问它。
或者,更好的是,考虑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"> </a>
<span class="option-box-testo">Hello</span>
<asp:label id="label1" runat="server" visible="false"/>
</div>
然后在codebehind drop in:
public Label HiddenField
{
get { return (Label)FindControl("label1"); }
}
从那里你可以添加尽可能多的这些控件,无论你使用什么,都可以使用它,然后使用类似的FindControl调用(如果你需要多次调用,可以将它们放在NamingContainer中,参见{{3想知道怎么做。在你拥有用户控件的地方之后,你只需要做UserControl.HiddenField.Text来获取你正在寻找的标签。
这个最大的假设是,这些隐藏的字段都必须以一般的隔离方式处理 - 这是你的ForEach给我的印象,因为你似乎在处理每一个,但是彼此独立。如果所有这些事情都必须根据彼此的价值来处理,那么你最好不要使用Repeater建议。