将单击事件添加到多个链接按钮

时间:2012-06-25 16:39:39

标签: c# asp.net

我看过其他帖子,但没有解释我想要做的很好。

在运行时,依赖于从数据库检索的数据,转发器将x量的LinkBut​​tons添加到表单中:

<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>

当点击事件后台的Fire时,应该是

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

然后设置一些视图。但是我需要使用CommandArgument,因为它包含了在prodView.Views内查找的键。

它不一定是variantID传递但是可以和Int取决于哪一个,只需要指示要显示的视图!

我在页面init处创建了所有视图,并在init处动态添加到页面中。

我使用实体框架通过几个视图查询数据库! (发现从关系数据库中获取复杂数据更容易!)

我不知道如何链接所有这些LinkBut​​ton,以便我可以编程方式切换视图?

1 个答案:

答案 0 :(得分: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作为存储容器,但您也可以使用Session。