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>

Literalcsに書き込んで、パネルに追加することは避けたいと思います。

あなたは私に何を提案できますか?

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 に答える