Обращение к элементам управления ASP.NET из Business Logic - PullRequest
0 голосов
/ 12 октября 2009

На моей странице есть текстовое поле txtMyInfo. У меня также есть отдельный класс бизнес-логики, который я использую, чтобы манипулировать вещами на странице. Как обратиться к txtMyInfo из метода в классе бизнес-логики. Могу ли я ссылаться на элемент управления через объект страницы? Я не вижу ссылки.

public void MyBusinessLogic(Page page){
    page.Controls.txtMyInfo.Text="";
}

Ответы [ 5 ]

3 голосов
/ 12 октября 2009

Бизнес-логика не должна работать на вашем пользовательском интерфейсе. Вы получите большой шар того, что по существу заложено в вашем проекте.

Вам следует попытаться ознакомиться с концепцией, называемой «Разделение интересов»: http://en.wikipedia.org/wiki/Separation_of_concerns

В этом случае вам действительно нужно что-то подобное для вашей бизнес-логики:

public static class MyBusinessLogicClass
{
     public static string GetMyInfo()
     {
          return string.Empty;
     }
}

И в вашем коде пользовательского интерфейса теперь у вас будет:

public void Page_Load(object sender, EventArgs e)
{
     txtMyInfo.Text = MyBusinessLogicClass.GetMyInfo();
}

Это поможет вам избежать этой проблемы в целом.

Редактировать : Я также хотел бы отметить, что не имеет значения, какой шаблон вы используете (обратите внимание, в моем примере я не использую ничего, как MVC, MVP или «Шаблон Джо D» «Jour"). Достаточно просто разделить ваши проблемы.

Редактировать Редактировать : Хотя этот ответ не дает прямого ответа на ваш вопрос о том, как ссылаться на элементы управления извне пользовательского интерфейса, он косвенно отвечает на него, показывая вам способ избежать этого на все .

2 голосов
/ 12 октября 2009

Try ...

TextBox txtInfo = (TextBox)page.FindControl("txtMyInfo");
1 голос
/ 12 октября 2009

У меня тоже есть отдельная бизнес логика класс, который я использую, чтобы манипулировать вещами на странице. Как я имею в виду txtMyInfo из метода в класс бизнес-логики.

Если вы пытаетесь реализовать шаблон MVC, вы почти никогда не будете изменять интерфейс напрямую через свой класс BL. Вместо этого создайте для него интерфейс, что-то вроде:

// Interface definition
public ISearchForm
{
    String Keywords { get; set; }
    int ItemsPerPage { get; set; }
    Action<string> SearchButtonClicked;
    // ...
}

// Implementation
public SearchForm : ISearchForm
{
    public String Keywords
    {
        get { return txtKeywords.Text; }
        set { txtKeywords.Text = value; }
    }

    // ...
}

Ваш интерфейс должен отображать интересные части вашей страницы для вашего класса контроллера.

1 голос
/ 12 октября 2009

Вы можете просто иметь параметр TextBox и передавать TextBox, а не Page.

0 голосов
/ 12 октября 2009

Если бы вы сделали это таким образом, вы могли бы сослаться на фактический класс управления hte. Вы также можете использовать FindControl, который будет немного более общим, но будет работать

public void MyBusinessLogic(Page page){
    page.findcontrol("txtMyInfo").Text="";
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...