2016-08-22 83 views
0

我在我的MVC项目中有两个不同的登录页面,根据哪个URL用于访问站点,需要显示相关的登录页面(特定的客户端要求)。如何根据URL在MVC中设置起始页面/布局?

我能够确定哪些_layout基于登录页面的名称用在_ViewStart

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

但我怎么可以设置基于URL的初始视图/登陆页面?

或者这可以在IIS中完成?

注意:无论是登录页面实际上比名字相同外,作为唯一的原因,我不得不给它一个不同的名字才能在_ViewStart应用不同的布局!

+0

我会(并在过去)实现了[自定义剃须刀视图引擎](http://stackoverflow.com/questions/9838766/how-do-i-implement-a-custom-razorviewengine-to-find -views-in-non-standard-locati)来解决这个问题 – Liam

回答

0

我通过删除登录页面的第二个版本(仅留下具有两个不同版本的布局的登录页面)并根据正在访问的站点的域名_ViewStart选择布局页面来解决我的问题:

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

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

1

在你登录的ActionResult,让这代表你从哪里来(和全成登录后,会被重定向到)的URL RETURNURL参数和返回不同的视图根据其价值,就像这样:

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

     return View("ViewName2"); 
    } 
相关问题