C# 从业务逻辑中引用ASP.NET控件
在我的页面中,我有一个文本框txtMyInfo。我还有一个单独的业务逻辑类,我用它来管理页面上的内容。如何从业务逻辑类中的方法引用txtMyInfo。我可以通过页面对象引用控件吗?我看不到推荐人C# 从业务逻辑中引用ASP.NET控件,c#,asp.net,webforms,C#,Asp.net,Webforms,在我的页面中,我有一个文本框txtMyInfo。我还有一个单独的业务逻辑类,我用它来管理页面上的内容。如何从业务逻辑类中的方法引用txtMyInfo。我可以通过页面对象引用控件吗?我看不到推荐人 public void MyBusinessLogic(Page page){ page.Controls.txtMyInfo.Text=""; } 试试看 如果这样做,您可能必须引用hte控件的实际类。您还可以使用FindControl,它会更通用一些,但也会起作用 public void
public void MyBusinessLogic(Page page){
page.Controls.txtMyInfo.Text="";
}
试试看
如果这样做,您可能必须引用hte控件的实际类。您还可以使用FindControl,它会更通用一些,但也会起作用
public void MyBusinessLogic(Page page){
page.findcontrol("txtMyInfo").Text="";
}
您可以只使用一个TextBox参数并传入TextBox而不是页面。业务逻辑不应在您的UI上运行。你最终会得到一个很大的项目背后的代码 您应该尝试并熟悉一个称为“关注点分离”的概念: 在这种情况下,您真的希望业务逻辑更像这样:
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’Jour”的东西)。把你的顾虑分开就足够了
编辑:虽然此答案不能直接回答您关于如何从UI外部引用控件的问题,但它通过向您展示一种根本不必这样做的方法来间接回答您的问题
我还有一个单独的业务逻辑
我用来整理东西的类
在页面上。我怎么说
中的方法的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; }
}
// ...
}
//接口定义
公共伊斯兰教教团
{
字符串关键字{get;set;}
int ItemsPerPage{get;set;}
点击操作搜索按钮;
// ...
}
//实施
公共搜索表单:ISearchForm
{
公共字符串关键字
{
获取{return txtKeywords.Text;}
设置{txtKeywords.Text=value;}
}
// ...
}
界面应该向控制器类公开页面的有趣部分。如果要分离业务逻辑,为什么要直接引用UI对象?尝试使用MVC模式。如果您使用的是WebForms,请使用MVP模式。这是一个很好的观点,我将对此进行研究。不管怎样,我仍然需要掌握控制引用。谢谢,你的例子很清楚。如果您添加了一些关于控件引用的内容(我可能在其他地方需要它),那么您就解决了我的问题并回答了我的问题。我是说您应该完全避免它。除此之外,引用控件与使用对它的引用一样简单。其他人对此发表了文章,但您不应该需要从任何地方引用控件,而应该从UI引用控件,因为您似乎已经知道如何引用。即使冒着得不到公认答案的风险,我也不会让这种编程永久化。。。有一天我可能不得不处理您的代码:)如果您在页面生命周期中过早调用MyBusinessLogic(),这可能会发生。你什么时候打电话?也检查一下这个。。。
// 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; }
}
// ...
}