锋利的C#

  程序员博客 :: 首页 :: 新随笔 :: 订阅 :: 管理 :: 登录 ::
访问csharp的空间

随笔分类

随笔归档

个人相册

阅读排行榜

评论排行榜

最新评论

csharp 阅读(4513) 评论(3)

首先需要解决的问题是如何在cshtml里取得Controller、Action和其它参数:

string controller, action, id;

var routeValues = HttpContext.Current.Request.RequestContext.RouteData.Values;
if (routeValues.ContainsKey("controller"))
controller = (string)routeValues["controller"];

if (routeValues.ContainsKey("action"))
action = (string)routeValues["action"];

if (routeValues.ContainsKey("id"))
id =(string)routeValues["id"];
else if (HttpContext.Current.Request.QueryString.AllKeys.Contains("id"))
id = HttpContext.Current.Request.QueryString["id"];
else
id = string.Empty;



下面的代码是根据controller改变不同的Layout,也可以根据action等其它参数作改变。

@{
var controller = HttpContext.Current.Request.RequestContext.RouteData.Values["Controller"].ToString();

string layout = "";
if (controller == "Admin")
{
layout = "~/Views/Shared/_AdminLayout.cshtml";
}
else
{
layout = "~/Views/Shared/_Layout.cshtml";
}

Layout = layout;
}

评论列表
syeerzy
不觉得这是"解决了一个根本不存在的问题"么?

为什么需要根据controller来变呢? 如果某个layout是某个controller的,不是简单在这个controller的view里指定这个layout事情就完了么?  

你的意思是, 一个view(如果多个,就可以用我说的简单办法)对应于多个controller并且有完全不同的呈现方式(layout都变了)? 那么首先设计上有严重问题, view对应于界面,你如果有截然不同的界面,应该使用多个view.

MVC的本质作用是什么? 责任单一化, 解耦.   你这个做法等于绕一圈把解开的东西又缠绕一起了,不是么?
dd
定制不同的母板是可能发生的。。要不主题怎么切换。。
马里奥
定制模板。。。。。。。。

发表评论
切换编辑模式