围绕添加到面板的隐藏字段创建 html 的最佳方法是什么
本文关键字:html 创建 最佳 方法 是什么 字段 隐藏 添加 | 更新日期: 2023-09-27 18:33:28
>我将这些隐藏的输入字段添加到面板中:
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
并将它们添加到面板中。
你能对我提出什么建议?
您可以使用中继器控件,标记:
<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);
}
}
当然,您必须将中继器与对象列表绑定
你可以像这样使用 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);
如果你一遍又一遍地需要这种东西,你可能应该考虑让它成为一个用户控件,这样你就可以简单地编写你需要的东西,然后重用它,而不必担心需要围绕它的东西。 此时,您可以将隐藏字段设置为所需的任何字段,并在以后以编程方式访问它。
或者,更好的是,考虑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>
然后在代码隐藏中插入:
public Label HiddenField
{
get { return (Label)FindControl("label1"); }
}
从那里,您可以添加任意数量的这些控件,无论您在其中使用它,都可以调用,然后使用类似的 FindControl 调用(或者如果您需要多个调用,请将它们放在 NamingContainer 中,请参阅这篇文章了解如何执行此操作。 在用户控件的位置使用它之后,您只需执行UserControl.HiddenField.Text即可获取要查找的标签。
这最大的假设是,这些隐藏的字段都必须在一般情况下隔离处理 - 这是您的ForEach给我的印象,因为您似乎以类似的方式处理每个字段,但彼此独立。 如果所有这些事情都必须根据彼此的值来处理,那么最好使用中继器建议。