法的内容:
Code
/// <summary>
/// 注册页面要使用到的类
/// </summary>
/// <param name="notification"></param>
public override void execute(INotification notification)
{
Page page = notification.getBody() as Page;
facade.registerCommand(LOGIN, typeof(LoginCommand));
facade.registerMediator(new LoginMediator(page));
}
在这里可以统一地注册页面需要使用到的MVC。现在再来看一下LoginMediator类的构造函数
Code
new public static readonly string NAME = "LoginMediator";
/// <summary>
/// 为页面控件添加事件,这里只添加登录事件
/// </summary>
/// <param name="page"></param>
public LoginMediator(Page page)
: base(NAME, page)
{
Button loginButton = (Button)page.FindControl("LoginButton");
loginButton.Click += new EventHandler(Login);
}
Mediator是用来管理V(View)层的,可以在Mediator里面添加事件或改变视图的表现等操作。我这里是先为登录按钮注册一个登录事件。
Code
/// <summary>
/// 登录按钮的单击事件
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
public void Login(object sender, EventArgs e)
{
TextBox userNameTextBox = (TextBox)MyPage.FindControl("UserNameTextBox");
string userName = userNameTextBox.Text;
TextBox passwordTextBox = (TextBox)MyPage.FindControl("PasswordTextBox");
string password = passwordTextBox.Text;
LoginVO loginVO = new LoginVO(userName, password);
sendNotification(DefaultPageCommand.LOGIN, loginVO);
}
Login方法通过传的Page获取用户登录的用户名和密码,然后发出通知DefaultPageCommand.LOGIN,并且传入登录的信息loginVO,执行相应的Command类。Mediator还有一些其它的重要的方法
Code
/// <summary>
/// 列出该Mediator要接收的通知
/// </summary>
/// <returns></returns>
public override IList<string> listNotificationInterests()
{
List<string> list = new List<string>();
list.Add(LoginCommand.LOGIN_SUCCESS);
list.Add(LoginCommand.LOGIN_FAILED);
list.Add(LoginCommand.USER_NOT_FOUND);
return list;
}
Mediator也是可以接收通知的,listNotificationInterests方法用来告诉View它所以接收的通知,这样,有方法发出对应的通知后,它就会调用handleNotification来处理
Code
/// <summary>
/// 对接收到的通知分别进行处理
/// </summary>
/// <param name="notification"></param>
public override void handleNotification(INotification notification)
{
switch (notification.getName())
{
case "LoginSuccess":
MyPage.Session["User"] = notification.getBody();
MyPage.Response.Redirect("Welcome.aspx");
break;
case "LoginFailed":
Mes
|