在asp.net中创建一个以按钮作为成员的类
本文关键字:成员 按钮 一个以 asp net 创建 | 更新日期: 2023-09-27 18:07:37
我继承了一个asp.net web应用程序,将信息传递给gridview。每行都有不同的按钮和链接,并根据接收到的信息启用/禁用它们。每一行都有一个很长的逻辑链来设置按钮,这使得它很难阅读。有没有办法设置一个按钮类,使其更容易阅读?
不确定"按钮类"是什么意思,但是您可以创建自定义服务器控件作为按钮控件的包装器,并提供一些额外的属性或方法来简化GridView逻辑。
下面是我们构建的一个简单的RadioButton包装器示例,它扩展了标准RadioButton的属性,以便它可以保存额外的信息。你可以尝试对GridView按钮做类似的事情:
[DefaultProperty("Text")]
[ToolboxData("<{0}:RadioButton runat=server></{0}:RadioButton>")]
public class RadioButton : System.Web.UI.WebControls.RadioButton
{
[Bindable(true)]
[DefaultValue("")]
[Localizable(true)]
public string Value
{
get
{
string RadioValue = (string)ViewState["Value"];
return (RadioValue == null) ? String.Empty : RadioValue;
}
set
{
ViewState["Value"] = value;
}
}
protected override void RenderContents(HtmlTextWriter output)
{
output.Write(Text);
}
}
您可以快速完成的一件事是将数据源转换为报表类。然后,您可以将启用/禁用的逻辑移动到该类中(即,每个按钮的单个属性),并更新网格以简单地检查每个链接/按钮的适当属性。
这至少将逻辑从aspx文件移到更容易维护/阅读的地方。
例如:grid.DataSource = MyReportClass.GetReport();
,
public MyReportClass
{
public string Name { get; set; }
public string EnableLink1 { get { //logic here } }
public string EnableButton3 { get { ///logic here } }
public static List<MyReportClass> GetReport()
{
// get the data
}
}
则aspx变为
<gridview id="grid" runat="server" ... >
...
<asp:templatefield headertext="Link1" ><itemtemplate>
<asp:linkbutton id="l1" runat="server" ...
visible='<%# !(bool)DataBinder.Eval(Container.DataItem, "EnableLink1") %>'
/>
</itemTemplate></asp:templatefield>
...
</gridview>