我的演示者中有以下方法验证UI上的用户输入。基本上,为了捕获文本框的text属性的值,它使用由表单上的事件触发传入的sender对象。
PRESENTER
_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
}
这是否会导致意外错误?
如果是这样,请让我知道更好的方法吗?
编辑(为了清晰起见):
此代码编译并运行且没有错误。基本上我想知道的是,这是一种标准的方法吗?你以前用这种方式做过事吗?如果它不好,请告诉我一个更好的方法来做同样的事情!
答案 0 :(得分:3)
通过这种方式,您可以将 Presenter 与Web控件相结合。如果您决定使用另一个接受输入的控件更改TextBox
,则需要在查看和演示者中更改代码。 演示者不应该知道您在查看中使用的控件类型。
您可以采取以下措施将演示者与视图分离。
您需要定义一个具有获取/设置所需属性的接口。
public interface IView
{
string Input { get; }
}
IView
接口的可靠实现,可以是.aspx页面,.ascx用户控件等。需要将自身的实例传递给 Presenter 。
假设你的标记中有一个TextBox
。您在Text
获取访问者中返回TextBox
的{{1}}属性。
Input
现在在 Presenter 中调用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;
}
}
}
接口的Input
属性,该属性在当前情况下返回
IView
通过这样做可以改变您用于设计查看的控件类型,而不会导致演示者的更改。例如,您可以使用相同的演示者类来获取Web表单并赢取表单项目,而不必担心您使用的控件,因为演示者只知道查看界面坚实的实施。
您可以在此处查看更详细的示例: http://www.codeproject.com/Articles/14642/Model-View-Presenter-with-ASP-NET