围绕添加到面板的隐藏字段创建 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">&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>

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

你能对我提出什么建议?

围绕添加到面板的隐藏字段创建 html 的最佳方法是什么

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

<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);
  }
}

当然,您必须将中继器与对象列表绑定

你可以像这样使用 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);

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

或者,更好的是,考虑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给我的印象,因为您似乎以类似的方式处理每个字段,但彼此独立。 如果所有这些事情都必须根据彼此的值来处理,那么最好使用中继器建议。