создание класса с кнопками в качестве членов в asp.net - PullRequest
1 голос
/ 06 сентября 2011

Я унаследовал веб-приложение asp.net, которое передает информацию в gridview. Каждая строка имеет различные кнопки и ссылки на них, и они включаются / отключаются на основе полученной информации. Существует очень длинная цепочка логики, которую проходит каждая строка для настройки кнопок, что делает ее очень трудной для чтения Есть ли способ настроить класс кнопок, чтобы их было легче читать?

Ответы [ 2 ]

1 голос
/ 27 сентября 2011

Одна вещь, которую вы могли бы сделать быстро, это преобразовать DataSource в класс отчета. Затем вы можете переместить логику для включения / выключения в этот класс (то есть, отдельное свойство для кнопки) и обновить сетку, чтобы просто проверить соответствующее свойство для ссылки / кнопки.

Это, по крайней мере, перемещает логику из файла 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>
1 голос
/ 06 сентября 2011

Не уверен, что вы подразумеваете под "классом кнопок", но вы можете создать пользовательские серверные элементы управления в качестве оболочки для элемента управления кнопки и предоставить некоторые дополнительные свойства или методы для упрощения логики GridView.

Вот быстрый и грязный пример созданной нами обертки 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);
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...