Asp.net mvc 如何将ActionResult返回到正确的视图?

Asp.net mvc 如何将ActionResult返回到正确的视图?,asp.net-mvc,asp.net-mvc-3,asp.net-mvc-controller,Asp.net Mvc,Asp.net Mvc 3,Asp.net Mvc Controller,我有一个MVC 3 web应用程序(实际上更像是一个子应用程序),它不依赖ASPNET进行身份验证,因为它已经在应用程序的另一个领域中使用,我们正在使用不同类型的身份验证。无论如何,我决定用自己的SQL表创建自己的身份验证系统,该表在应用程序中的一个表单上运行良好。现在,我正在尝试将其滚动到共享布局中,在主控制器中调用“登录”操作。我遇到的问题是如何从登录操作返回到用户所在的位置。当我尝试“return View();”时,它会尝试返回一个不存在的主/登录视图,这是可以理解的。我如何从这次行动中

我有一个MVC 3 web应用程序(实际上更像是一个子应用程序),它不依赖ASPNET进行身份验证,因为它已经在应用程序的另一个领域中使用,我们正在使用不同类型的身份验证。无论如何,我决定用自己的SQL表创建自己的身份验证系统,该表在应用程序中的一个表单上运行良好。现在,我正在尝试将其滚动到共享布局中,在主控制器中调用“登录”操作。我遇到的问题是如何从登录操作返回到用户所在的位置。当我尝试“return View();”时,它会尝试返回一个不存在的主/登录视图,这是可以理解的。我如何从这次行动中回到行动前的任何地方?所有视图都使用共享布局,所以我希望这相当简单

public class HomeController : Controller       
{

 .....

    private DataModel db = new DataModel();

    //
    // GET: /Home/

    public ActionResult Index()
    {
        return View();
    }

    [HttpPost]
    public ActionResult Login()
    {

        string un = Request["form_un"];
        string pc = Request["form_pc"];
        int usercount = db.JobBoardUsers.Where(u => u.userid.Equals(un) && u.passcode.Equals(pc)).Select(u => new AccountModel() { uid = u.id }).Count();
        usercount = db.JobBoardUsers.Where(u => u.userid.Equals(un) && u.passcode.Equals(pc)).Count();
        if (usercount > 0)
        {
            HttpContext.Session["IsSignedIn"] = true;
            HttpContext.Session["IsSignedInId"] = un;
        }
        return View();
    }

您需要使用return
redirectoaction
或return
Redirect
方法,而不是
return View()

您可以使用不同的方法在登录操作中获得上一页

1) 将当前页面url作为参数传递给登录操作方法,并在成功身份验证后将其用于重定向

2) 使用请求对象获取UrlReferer属性值,并将其用作要重定向的页面


检查他们在nerddinner中的操作说明。

您是否明确进入
登录
视图(即,您是否调用此操作,或者服务器是否重定向未经身份验证的用户)?根据您的逻辑,您可以使用
Request.Path
来确定目标地址。甚至
Request.urlReferer
。它是显式的。登录表单上的操作是“主页/登录”。该应用程序完全可用,无需验证(登录提供了一些附加功能,如记住用户信息),因此我不想自动重定向到登录页面。谢谢,我使用了#2,它工作得非常好。我本以为MVC有一个更复杂的标准来做这件事,就像它在其他方面一样。