位置:海鸟网 > IT > ASP.NET >

ASP.NET MVC中的PRG模式

  当你在 internet上冲浪时,你是否见到过下面这玩意?

  

  我们首先需要两个操作,一个用于显示登录视图,另一个用于处理登录操作,如下所示:

  view plaincopy to clipboardprint?

  /// <summary>

  /// Displays the login view (the form to enter credentials)

  ///

  /// 显示登录视图(用于输入凭证的表单)

  /// </summary>

  public ActionResult Login()

  {

  return View("Login");

  }

  /// <summary>

  /// Handles form data from the login view, in other words, the form, which

  /// is on "login.aspx" has a form tag with it's action set to "ProcessLogin",

  /// the name of this method.

  ///

  /// 处理来自登录视图的表单数据,换句话说,“login.aspx”中的表单的form标签

  /// 的action被设置为“ProcessLogin”——该方法的名字。

  /// </summary>

  public ActionResult ProcessLogin(string email, string password)

  {

  IUser user = userRepository.GetByEmail(email);

  if (user != null && authenticator.VerifyAccount(user, password))

  {

  authenticator.SignIn(user);

  return RedirectToAction("Index", "Account");

  }

  //login failed

  // add some message here in TempData to tell the user the login failed

  // 登录失败

  // 在这里向TempData中添加一些消息,告诉用户登录失败了

  return RedirectToAction("Login");

  }

  注意两个方法的返回值类型的不同。 Login()只有一个出口“return View("Login")”,而ProcessLogin有两个出口,这两个出口都使用了RedirectToAction()调用,它返回的是 RedirectToRouteResult类型——ViewResult的一个子类——的对象。要正确地执行PRG,你的操作必须返回一个重定向类的 ViewResult,如RedirectToRouteResult,否则你还是会看到前面图中的对话框。

  下面是登录视图( login.aspx)。着重注意一下“action”属性。

  view plaincopy to clipboardprint?

  <form name="loginActionForm" method="post" action="ProcessLogin" id="loginActionForm">

  <fieldset class="login">

  <legend>Login</legend>

  <label for="email">Email</label>

  <input type="textbox" id="lemail" name="email" maxlength="100" value="" class="required" />

  <label for="password">Password</label>

  <input type="password" id="lpassword" name="password" maxlength="256" class="required" />

  <input type="image" src=http://www.jz123.cn/text/"<%= AppHelper.ImageUrl("btn_go.gif") % />" class="submit" />

  <div class="errorlist"></div>

  </fieldset>

  </form>

  实现了PRG模式之后,我的URL干净了,也能加书签了。我的用户也可以冲浪冲得更爽了,那些混乱的安全对话框消息再也不见了。您瞧准呵,PRG模式,还真对得起咱这张网页