0

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

在运行时,我有 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>

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

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

然后设置一些视图。但是,我需要通过 CommandArgument,因为它拥有在prodView.Views.

不一定要variantID通过,但可以是和 Int 取决于哪个,只需要一些关于要显示什么视图的指示!

我在页面初始化时创建了所有视图,并在初始化时动态添加到页面中。

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

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

4

1 回答 1

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。

于 2012-06-25T16:44:18.390 回答