2009-05-31 48 views
2

誰かがこれをどのように動作させることができるか教えてもらえますか?私はリピータコントロール内のドロップダウンコントロールを区別したい。私は現在、ライフサイクルとバッファがどのように書かれているかについて理解していますが、私の選択肢は何ですか? 'AdTitle <%#Container.ItemIndex%>' です:ここでASP.NETリピータ項目内のドロップダウンコントロールIDを動的に変更する

コードファイル

Dim repeatTimes((TotalAdInsured - 1)) As Integer 

    myRepeater.DataSource = repeatTimes 
    myRepeater.DataBind() 

Aspfile

<asp:Repeater ID="myRepeater" runat="server"> 
    <ItemTemplate> 
     <asp:DropDownList ID="AdTitle<%# Container.ItemIndex %>" runat="server"> 
      <asp:ListItem Selected="True" Value="" Text=""/> 
      <asp:ListItem Selected="False" Value="Miss" Text="Miss"/> 
      <asp:ListItem Selected="False" Value="Ms" Text="Ms"/> 
      <asp:ListItem Selected="False" Value="Mrs" Text="Mrs"/> 
      <asp:ListItem Selected="False" Value="Mr" Text="Mr"/> 
      <asp:ListItem Selected="False" Value="Other" Text="Other"/> 
     </asp:DropDownList> 
    </ItemTemplate> 
</asp:Repeater> 

戻り値このエラー

パーサーエラーメッセージを何が起こるかであります有効な識別子ではありません。

答えて

5

私はリピーター詐欺の内側にドロップダウン コントロールを区別したいですトロール。

あなたはそうする必要はありません。

マークアップ:

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %> 

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 

<html xmlns="http://www.w3.org/1999/xhtml"> 
<head runat="server"> 
    <title>Untitled Page</title> 
</head> 
<body> 
    <form id="form1" runat="server"> 
    <div> 
     <asp:Label runat="server" ID="lblMsg" Text="Click a button" /> 
     <hr /> 
     <asp:Repeater runat="server" ID="rptAwesome" onitemcommand="rptAwesome_ItemCommand" 
      > 
      <ItemTemplate> 
       <asp:Button runat="server" ID="btnAwesome" 
        Text='<%# "Button #" + Container.ItemIndex %>' 
        CommandArgument='<%# Container.DataItem %>'/><br /> 
      </ItemTemplate> 
     </asp:Repeater> 
    </div> 
    </form> 
</body> 
</html> 

分離コード:BCの答えに拡大

using System; 
using System.Configuration; 
using System.Data; 
using System.Linq; 
using System.Web; 
using System.Web.Security; 
using System.Web.UI; 
using System.Web.UI.HtmlControls; 
using System.Web.UI.WebControls; 
using System.Web.UI.WebControls.WebParts; 
using System.Xml.Linq; 

public partial class _Default : System.Web.UI.Page 
{ 
    protected void Page_Load(object sender, EventArgs e) 
    { 
     if (!Page.IsPostBack) 
     { 
      var x = new int[] { 1, 2, 3, 4, 5 }; 
      rptAwesome.DataSource = x; 
      rptAwesome.DataBind(); 
     } 
    } 
    protected void rptAwesome_ItemCommand(object source, RepeaterCommandEventArgs e) 
    { 
     Button btnAwesome = (Button)e.CommandSource; 
     lblMsg.Text = string.Format("btnAwesome.ID = {0}, e.CommandArgument = {1}", btnAwesome.ID, e.CommandArgument); 
    } 
} 
0

イベントハンドラをRepeater.ItemDataBoundに追加し、アイテムコンテナへの参照を使用してハンドラ内でコントロールを作成することができます。

1

オクラホマ...あなたが現在行っていることをやり遂げることはできません。

コントロールのIDプロパティは、タグのID属性と簡単な値を使用してのみ設定できます。例:<asp:Button runat="server" id="Button1" />

私はあなたがやろうとかを見ることができますが、なぜ私は本当に理解していない...

は、Repeaterコントロールは、あなたのデータソース内の項目ごとに、1つのアイテムを含んでいますので、それは完璧ですあなたのDropDownListをID="AdTitle"と呼ぶだけで、次の行のものとは異なる'AdTitle'になります。

サーバー側に戻すには、リピーター& FindControl("AdTitle")のアイテムを繰り返して、そのアイテムの特定のDropDownListを取得します。それはインクリメントIDを持つことが絶対に必要なら

、あなたはDropDownListコントロールを作成し、ItemTemplateにに追加し、プログラム(おそらくItemDataBoundイベントでこれを実行する必要があります。

3

あなたは内部の一意のIDを作成することはできませんそのようなマークアップによるリピータは。ただしリピーターにFindControlを使用して分離コードのドロップダウンを取得することができます。

Dim adTitle As DropDownList = MyRepeater.FindControl("AdTitle") 
If (Not adTitle Is Nothing) Then 
    ''Do something here 
End If 
1

:私は最近チェックボックスとはいえ、同じ問題を持っていた、私はここであなたを助けるかもしれないいくつかのサンプルコードです選択肢を永続させるときにIDを設定する必要がありました。少し不器用ですが、Item Data Boundのときにしました。私はセットアップと

 Repeater1.ItemDataBound += new RepeaterItemEventHandler(Repeater1_ItemDataBound); 
     Repeater1.DataSource = listOfMsts; 
     Repeater1.DataBind(); 

続く

public class mst 
{ 
    public int Id { get; set; } 
    public string Name { get; set; } 
    public string Number { get; set; } 
    public bool NumberRequired { get; set; } 
} 

は、Page_Loadのに必要なのですか、このクラスのコレクションをバインド

<asp:Repeater ID="Repeater1" runat="server" > 
<HeaderTemplate>Header<br /><br /></HeaderTemplate> 
<ItemTemplate> 
    <asp:CheckBox ID="cb" runat="server" Text='<%# DataBinder.Eval(Container.DataItem, "Name") %>' /> 
    ...other controls removed for brevity 
</ItemTemplate> 
<FooterTemplate> 
    <asp:Button ID="Button1" runat="server" OnClick="Submit" Text="Submit" /> 
</FooterTemplate> 
</asp:Repeater> 

:ここ

は、マークアップです、これはどこにスルーループ

void Repeater1_ItemDataBound(object sender, RepeaterItemEventArgs e) 
    { 
     if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem) 
     { 
      var mst = (mst)e.Item.DataItem; 
      ((CheckBox)e.Item.FindControl("cb")).ID = mst.Id.ToString(); 
     } 
    } 

送信ボタンがヒットしたときに、私はできると確認され、それらのIDを取得し、保存します:私はIDを設定

protected void Submit(object sender, EventArgs e) 
    { 
    foreach (var item in Repeater1.Items) 
     { 
      var checkboxes = ((RepeaterItem)item).Controls.OfType<CheckBox>().ToList(); 
      if (checkboxes[0].Checked) 
      { 
       Save(checkboxes[0].ID); 
       ....other stuff 
      } 
     } 
    }