【问题标题】:How can I set the start page/layout in MVC based on the URL?如何根据 URL 在 MVC 中设置起始页/布局?
【发布时间】:2016-08-25 18:10:14
【问题描述】:

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

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

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

但是如何根据 URL 设置初始视图/登陆页面?

或者这可以在 IIS 中完成吗?

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

【问题讨论】:

标签: asp.net-mvc


【解决方案1】:

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

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

        return View("ViewName2");
    }

【讨论】:

    【解决方案2】:

    我解决了我的问题,方法是删除登录页面的第二个版本(只留下一个登录页面有两个不同版本的布局)并根据访问站点的域在_ViewStart 中选择布局页面:

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

    这样就不必更新控制器以返回不同的视图,并且适用于所有页面。

    【讨论】:

      猜你喜欢
      • 2017-07-18
      • 2013-03-12
      • 1970-01-01
      • 2020-12-22
      • 2011-12-11
      • 1970-01-01
      • 2022-08-18
      • 2010-12-31
      • 2013-09-30
      相关资源
      最近更新 更多