2009-09-02 57 views
3

想象一下,我在页面上有一个子表单的场景。此子表单包含在部分用户控件中,并发布到其自己的专用控制器操作中。如果违反商业规则,我想返回用户以前的相同视图。asp.net mvc - 如何将用户返回到上一个操作?

实施例:

  • 用户是在/示例/第1页这使得局部 “SignOnForm”
  • 点登录表单提交到 “帐户/点登录”。
  • 如果某些东西无效,我想将用户返回到带有模型状态的/ example/page1。但是,我无法硬编码视图,因为用户可能位于不同的页面上,例如/ othercontroller/page10。

回答

0
public SignOn(string username, string password) 
{ 
    //login logic here 
    ... 

    //Now check if the user is authenticated. 
    if(User.IsAuthenticated) 
    { 
    //Redirect to the next page 
    return RedirectToAction("page10", "Other"); 
    } 
    else 
    { 
    // You could also pass things such as a message indicating the user was not authenticated. 
    return RedirectToAction("page1", "Example"); 
    } 
} 

而且,你总是可以转储从最后一个“好”的发布页面的表单数据到隐藏的表单字段,并让用户点击“返回”按钮,从而有效地向前它们发布到上一页。我不特别喜欢这个,因为这意味着你必须保持以前的表单域。

2

您可以使用请求查询字符串一直通过SignOn进程返回URL。

首先,指定页面返回时,你使您的点登录偏:

<%@ Page Language="C#" MasterPageFile="~/Views/Shared/Site.Master" Inherits="System.Web.Mvc.ViewPage" %> 
<%@ Import Namespace="Microsoft.Web.Mvc"%> 

<!-- Your Example/Page1 page --> 

<% if (!User.IsAuthenticated) %> 
    <%= Html.RenderAction("SignOn", "Account", new { returnUrl = Request.Url.PathAndQuery }); %> 

使用如的RenderAction当前上下文是不是账户控制器。该功能目前不在MVC版本中,因此您需要在解决方案中包含ASP.NET MVC's Future library

接下来,点登录控制器:

public ActionResult SignOn(string returnUrl) 
{ 
    if (User.Identity.IsAuthenticated) 
    { 
     User user = userRepository.GetItem(u => u.aspnet_UserName == User.Identity.Name); 
     return !string.IsNullOrEmpty(returnUrl) 
       ? Redirect(returnUrl) 
       : (ActionResult) RedirectToAction("Index", "Home"); 
    } 
    return PartialView(); 
} 

点登录形式:

<% using (Html.BeginForm("SignOn", "Account", new { returnUrl = Request.QueryString["returnUrl"] },FormMethod.Post,new {@class="my_signOn_class"})) 
    { %> 
     <!-- Form --> 
<% } %> 

最后,在你点登录控制器处理表单POST,您可以将用户返回到 'RETURNURL' 使用以下代码:

[AcceptVerbs(HttpVerbs.Post)] 
public ActionResult SignOn(FormCollection formCollection, string returnUrl) 
{ 
    if (BusinessRuleViolated(formCollection)) 
    { 
     if(!string.IsNullOrEmpty(returnUrl)) 
     { 
      return Redirect(returnUrl); 
     } 
     return RedirectToAction("Index", "Home"); 
    } 

    // SignIn(...) 
} 
相关问题