2012-06-25 87 views
0

我已經看過其他帖子,但沒有解釋我想做的很好。將單擊事件添加到多個鏈接按鈕

在運行時我已經添加到形式了LinkBut​​ton的x量通過依賴於它從數據庫中檢索該數據的中繼器:

<asp:Repeater ID="variantRepeat" runat="server" 
    onitemcommand="variantRepeat_ItemCommand"> 
    <HeaderTemplate><ul></HeaderTemplate> 
    <ItemTemplate><li><asp:LinkButton ID="varLink" runat="server" CommandName="Click" CommandArgument='<%# Eval("variantID") %>'><%# Eval ("variant_name") %></asp:LinkButton></li></ItemTemplate> 
    <FooterTemplate></ul></FooterTemplate> 
</asp:Repeater> 

它應該,當點擊一個事件的消防後臺

protected void varLink_Click(object sender, EventArgs e) 
    { 
     ViewCollection views = prodView.Views; 
    } 

然後設置一些意見。不過,我需要CommandArgument才能通過,因爲它可以在prodView.Views內查找關鍵字。

它不一定是variantID這是傳遞,但可能是和詮釋取決於哪一個,只需要一些跡象顯示哪個視圖!

我有在頁面init創建的所有視圖,並在初始化時動態添加到頁面。

我使用實體框架通過幾個視圖查詢數據庫! (發現更容易從關係數據庫中獲取複雜的數據!)

我不知道如何鏈接所有這些LinkBut​​tons,以便我可以通過編程方式切換視圖?

回答

1

這裏有更詳細的代碼:

ASPX:

<asp:TextBox runat="server" ID="txtVariant" /> 

<asp:Repeater ID="variantRepeat" runat="server" 
    OnItemCommand="variantRepeat_ItemCommand"> 
    <HeaderTemplate><ul></HeaderTemplate> 
    <ItemTemplate> 
     <li> 
      <asp:LinkButton ID="varLink" runat="server" CommandName="Click" 
       CommandArgument='<%# Eval("variantID") %>'> 
       <%# Eval ("variant_name") %></asp:LinkButton> 
      </li> 
     </ItemTemplate> 
    <FooterTemplate></ul></FooterTemplate> 
</asp:Repeater> 

後面的代碼:

[Serializable] 
public class Variant 
{ 
    public Variant() { } 
    public int variantID { get; set; } 
    public string variant_name { get; set; } 
} 

public partial class _Default : System.Web.UI.Page 
{ 

    public Variant[] Variants 
    { 
     get 
     { 
      if (ViewState["Variants"] == null) 
       return new Variant[] { }; 
      return (Variant[])ViewState["Variants"]; 
     } 
     set { ViewState["Variants"] = value; } 
    } 

    protected void Page_Load(object sender, EventArgs e) 
    { 
     if (!IsPostBack) 
     { 
      Variants = new Variant[] { 
       new Variant() { variantID = 1, variant_name = "T1" }, 
       new Variant() { variantID = 2, variant_name = "T2" } 
      }; 
      variantRepeat.DataSource = Variants; 
      variantRepeat.DataBind(); 
     } 
    } 

    protected void variantRepeat_ItemCommand(object source, RepeaterCommandEventArgs e) 
    { 
     switch (e.CommandName) 
     { 
      case "Click": 
       var variant = Variants.FirstOrDefault(v => v.variantID.ToString() == e.CommandArgument.ToString()); 
       if (variant != null) 
       { 
        txtVariant.Text = variant.variantID.ToString(); 
        // show the right view 
       } 
       break; 
     } 
    } 
} 

的代碼使用ViewState的作爲存儲容器,但你也可以使用會話。

+0

你能舉出更多的示例代碼嗎? –

+0

請參閱更新的代碼。這是一個有效的例子,但你應該明白。 – Candide

相關問題