2016-08-22 86 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"); 
    } 
相關問題