C# 演示者如何访问文本框中的值进行验证
我的演示者中有以下方法,用于验证用户在UI上的输入。基本上,为了捕获文本框的text属性的值,它使用表单上的事件fire传入的sender对象 演示者C# 演示者如何访问文本框中的值进行验证,c#,.net,winforms,validation,mvp,C#,.net,Winforms,Validation,Mvp,我的演示者中有以下方法,用于验证用户在UI上的输入。基本上,为了捕获文本框的text属性的值,它使用表单上的事件fire传入的sender对象 演示者 _View.ValidateInPut += new EventHandler(_View_ValidateInPut); private void _View_ValidateInPut(object sender, EventArgs e) { var controller = (TextBox)sender; var t
_View.ValidateInPut += new EventHandler(_View_ValidateInPut);
private void _View_ValidateInPut(object sender, EventArgs e)
{
var controller = (TextBox)sender;
var text = controller.Text;
If (text is InValid)
MessageBox.Show ("The value in the Text box is invalid");
}
查看
private void txtACNo_Validating(object sender, CancelEventArgs e)
{
ValidateInPut(sender, e); // Firing the event
}
这会导致意外错误吗
如果是这样,请让我知道更好的方法
编辑(为了清晰):
这段代码编译和运行时没有错误。基本上我想知道的是,这是一种标准的方法吗?你以前有没有这样做过?如果它不好,让我知道一个更好的方法来做同样的 这样,您就可以将您的演示者与Web控件耦合起来。如果您决定使用另一个接受输入的控件更改
文本框
,则需要在视图和演示者中更改代码。演示者不应知道您在视图中使用的控件类型
以下是将演示者与视图解耦的方法
您需要使用需要获取/设置的属性定义一个接口
public interface IView
{
string Input { get; }
}
IView
界面(可以是.aspx页面、.ascx用户控件等)的可靠实现需要将自身的实例传递给演示者。
假设您的标记中有一个文本框
。在Input
get访问器中返回TextBox
的Text
属性
public class AspxPage : Page, IView
{
protected void Page_Load(object sender, EventArgs e)
{
Presenter presenter = new Presenter(this);
}
public string Input
{
get
{
return this.textBox.Text;
}
}
}
现在在演示者中调用IView
接口的Input
属性,在当前情况下返回该属性
public class Presenter
{
private IView view;
public Presenter(IView view)
{
this.view = view;
}
private void _ValidateInput()
{
string text = this.view.Input;
If (text is InValid)
MessageBox.Show ("The value in the Text box is invalid");
}
}
这样做的好处是更改用于设计视图的控件类型不会导致对演示者的更改。例如,您可以对web表单和win forms项目使用相同的presenter类,而不必担心使用的控件,因为presenter只知道视图界面,而不知道实体实现
您可以在此处查看更详细的示例:
这样,您就可以将演示者与Web控件耦合起来。如果您决定使用另一个接受输入的控件更改
文本框
,则需要在视图和演示者中更改代码。演示者不应知道您在视图中使用的控件类型
以下是将演示者与视图解耦的方法
您需要使用需要获取/设置的属性定义一个接口
public interface IView
{
string Input { get; }
}
IView
界面(可以是.aspx页面、.ascx用户控件等)的可靠实现需要将自身的实例传递给演示者。
假设您的标记中有一个文本框
。在Input
get访问器中返回TextBox
的Text
属性
public class AspxPage : Page, IView
{
protected void Page_Load(object sender, EventArgs e)
{
Presenter presenter = new Presenter(this);
}
public string Input
{
get
{
return this.textBox.Text;
}
}
}
现在在演示者中调用IView
接口的Input
属性,在当前情况下返回该属性
public class Presenter
{
private IView view;
public Presenter(IView view)
{
this.view = view;
}
private void _ValidateInput()
{
string text = this.view.Input;
If (text is InValid)
MessageBox.Show ("The value in the Text box is invalid");
}
}
这样做的好处是更改用于设计视图的控件类型不会导致对演示者的更改。例如,您可以对web表单和win forms项目使用相同的presenter类,而不必担心使用的控件,因为presenter只知道视图界面,而不知道实体实现
您可以在此处查看更详细的示例:
这样,您就可以将演示者与Web控件耦合起来。如果您决定使用另一个接受输入的控件更改
文本框
,则需要在视图和演示者中更改代码。演示者不应知道您在视图中使用的控件类型
以下是将演示者与视图解耦的方法
您需要使用需要获取/设置的属性定义一个接口
public interface IView
{
string Input { get; }
}
IView
界面(可以是.aspx页面、.ascx用户控件等)的可靠实现需要将自身的实例传递给演示者。
假设您的标记中有一个文本框
。在Input
get访问器中返回TextBox
的Text
属性
public class AspxPage : Page, IView
{
protected void Page_Load(object sender, EventArgs e)
{
Presenter presenter = new Presenter(this);
}
public string Input
{
get
{
return this.textBox.Text;
}
}
}
现在在演示者中调用IView
接口的Input
属性,在当前情况下返回该属性
public class Presenter
{
private IView view;
public Presenter(IView view)
{
this.view = view;
}
private void _ValidateInput()
{
string text = this.view.Input;
If (text is InValid)
MessageBox.Show ("The value in the Text box is invalid");
}
}
这样做的好处是更改用于设计视图的控件类型不会导致对演示者的更改。例如,您可以对web表单和win forms项目使用相同的presenter类,而不必担心使用的控件,因为presenter只知道视图界面,而不知道实体实现
您可以在此处查看更详细的示例:
这样,您就可以将演示者与Web控件耦合起来。如果您决定使用另一个接受输入的控件更改
文本框
,则需要在视图和演示者中更改代码。演示者不应知道您在视图中使用的控件类型
以下是您可以执行的解耦演示者的操作