我想你可以在你的控制器動作動態設置佈局
public ActionResult Search(int customer)
{
string layout = ... // function which get layout name with your customer id
var viewModel = ... // function which get model
return View("Search", layout, viewModel);
}
編輯:
我認爲,如果你想有一個更好的解決方案來改變所有的佈局來看,你必須創建一個ActionAttributeFilter將攔截結果並在viewresult中注入佈局
您的過濾器:
public class LayoutChooserAttribute : ActionFilterAttribute
{
private string _userLayoutSessionKey = "UserLayout";
public override void OnActionExecuted(ActionExecutedContext filterContext)
{
base.OnActionExecuted(filterContext);
var result = filterContext.Result as ViewResult;
// Only if it's a ViewResult
if (result != null)
{
result.MasterName = GetUserLayout(filterContext);
}
}
private string GetUserLayout(ActionExecutedContext filterContext)
{
if (filterContext.HttpContext.Session[_userLayoutSessionKey] == null)
{
// I stock in session to avoid having to start processing every view
filterContext.HttpContext.Session[_userLayoutSessionKey] = ...; // process which search the layout
}
return (string)filterContext.HttpContext.Session[_userLayoutSessionKey];
}
}
你的動作變成了:
[LayoutChooser]
public ActionResult Search(int customer)
{
var viewModel = ... // function which get model
return View("Search", viewModel);
}
如果你想要的屬性存在於所有的行動,在FilterConfig.RegisterGlobalFilters靜態方法,你可以添加你的過濾器:
public class FilterConfig
{
public static void RegisterGlobalFilters(GlobalFilterCollection filters)
{
...
filters.Add(new LayoutChooserAttribute());
}
}
精湛。 ....但是,那麼如何改變這個兒童頁面佈局頁面? – Arjun
我的意思是我想要做這個改變_ViewStart.html頁面佈局屬性...因爲,這個佈局應該像每個主題的母版頁一樣。請指導我...... – Arjun
您希望在開始時選擇佈局,然後在客戶的應用程序的任何地方使用相同的佈局? – binard