演示者如何在文本框中访问值以进行验证

时间:2014-06-15 12:12:19

标签: c# .net winforms validation mvp

我的演示者中有以下方法验证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
}

这是否会导致意外错误?

如果是这样,请让我知道更好的方法吗?

编辑(为了清晰起见):

此代码编译并运行且没有错误。基本上我想知道的是,这是一种标准的方法吗?你以前用这种方式做过事吗?如果它不好,请告诉我一个更好的方法来做同样的事情!

1 个答案:

答案 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