如何根据URL在MVC中设置起始页/布局?

时间:2016-08-22 10:18:36

标签: asp.net-mvc

我的MVC项目中有两个不同的登录页面,根据用于访问站点的URL,需要显示相关的登录页面(特定的客户端要求)。

我可以根据_layout中的登录页面名称定义使用哪个_ViewStart

if (Context.Request.Path.Contains("LoginG"))
    {
        Layout = "~/Views/Shared/_LayoutG.cshtml";
    }
    else { 
        Layout = "~/Views/Shared/_Layout.cshtml";
    }

但是如何根据网址设置初始视图/着陆页?

或者可以在IIS中完成吗?

注意:除了名称之外,两个登录页面实际上都是相同的,因为我必须给它一个不同的名称的唯一原因是为了在{{1}中应用不同的布局}!

2 个答案:

答案 0 :(得分:1)

在您的登录ActionResult中,获取returnUrl参数,该参数表示您来自的URL(并将在成功登录后重定向到)并根据其值返回不同的View,如下所示:

    public ActionResult Login(string returnUrl)
    {
        if (returnUrl == "url1")
        {
            return View("ViewName1");
        }

        return View("ViewName2");
    }

答案 1 :(得分:0)

我通过删除登录页面的第二个版本(只留下一个具有两个不同版本的布局的登录)并根据网站所在的域_ViewStart选择布局页面来解决我的问题从以下网址访问:

if (Request.Url.AbsoluteUri.ToString().ToLower().Contains("xxxx"))
{
    Layout = "~/Views/Shared/_LayoutG.cshtml";
}  
else
{
    Layout = "~/Views/Shared/_Layout.cshtml";
}

这节省了必须更新控制器以返回不同视图,并且可以在所有页面上工作。