参考Business Logic的ASP.NET控件

时间:2009-10-12 18:36:10

标签: c# asp.net webforms

在我的页面中,我有一个文本框txtMyInfo。我还有一个单独的业务逻辑类,用于操作页面上的内容。如何从业务逻辑类中的方法引用txtMyInfo。我可以通过页面对象引用控件吗?我没有看到参考文献。

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

5 个答案:

答案 0 :(得分:3)

业务逻辑不应在您的UI上运行。您最终会得到一个关于项目中代码隐藏的重要内容。

您应该尝试熟悉一个名为“关注点分离”的概念: http://en.wikipedia.org/wiki/Separation_of_concerns

在这种情况下,您真的需要更适合您业务逻辑的内容:

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

在您的UI代码中,现在您已经拥有:

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

它可以帮助您完全避免这个问题。

编辑:我还想指出你使用什么模式无关紧要(在我的例子中注意我没有使用像MVC,MVP或“Joe's Pattern”这样的东西D'怨妇“)。只是分开你的担忧就足够了。

修改编辑:虽然此答案并未直接回答您关于如何从用户界面外部引用控件的问题,但通过向您展示避免不必要的方法来间接回答这一切

答案 1 :(得分:2)

...试

TextBox txtInfo = (TextBox)page.FindControl("txtMyInfo");

答案 2 :(得分:1)

您可以使用TextBox参数并传入TextBox而不是Page。

答案 3 :(得分:1)

  

我也有一个单独的业务逻辑   我用来操纵东西的类   在页面上。我该如何参考   txtMyInfo来自一个方法   商业逻辑课。

如果您正在尝试实现MVC模式,那么您几乎不会直接通过BL类修改UI。相反,为它创建一个接口,如:

// 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; }
    }

    // ...
}

您的界面应该将页面的有趣部分暴露给您的控制器类。

答案 4 :(得分:0)

如果你这样做,你可能必须引用实际的hte控件类。您也可以使用FindControl,它会更通用但可以使用

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