我看过其他帖子,但没有解释我想要做的很好。
在运行时,依赖于从数据库检索的数据,转发器将x量的LinkButtons添加到表单中:
<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处动态添加到页面中。
我使用实体框架通过几个视图查询数据库! (发现从关系数据库中获取复杂数据更容易!)
我不知道如何链接所有这些LinkButton,以便我可以编程方式切换视图?
答案 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。