在asp.net中创建一个以按钮作为成员的类

本文关键字:成员 按钮 一个以 asp net 创建 | 更新日期: 2023-09-27 18:07:37

我继承了一个asp.net web应用程序,将信息传递给gridview。每行都有不同的按钮和链接,并根据接收到的信息启用/禁用它们。每一行都有一个很长的逻辑链来设置按钮,这使得它很难阅读。有没有办法设置一个按钮类,使其更容易阅读?

在asp.net中创建一个以按钮作为成员的类

不确定"按钮类"是什么意思,但是您可以创建自定义服务器控件作为按钮控件的包装器,并提供一些额外的属性或方法来简化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>