我提前为noob问题道歉。我已经习惯了经典ASP,并且正在使用.Net ASP网页(cshtml)测试水。
我创建了一个包含页眉和页脚的cshtml页面(Index.cshtml)。我使用
包括他们@RenderPage("~/Shared/_Header.cshtml")
@RenderPage("~/Shared/_Footer.cshtml")
在Index.cshtml的顶部,我想设置一个变量:
var topNav = "services";
我想从页眉和/或页脚访问此变量。我怎么能做到这一点?
答案 0 :(得分:2)
更新:由于这不是MVC4站点,而是独立的Razor模板,因此MVC的标准答案不适用。此页面显示如何使用PageData对象Customizing Site-Wide Behavior
在页面之间传递数据我的原始答案并不真正适用,但概念仍然有效:
至少有四个对象可用于实现此目的。也许最简单的是ViewBag。有关详细信息,请参阅When to use ViewBag, ViewData...。
@{
ViewBag.topNav = "services";
}
您可能会发现有点问题,因为ViewBag不提供强类型属性。如果ViewBag.topNav不存在,则在访问时将返回null。
但是,文章中没有任何容器会提供类型检查。这让我想到了第四个可以解决这个问题的对象。这是传递给视图的模型对象。有关详细信息,请参阅Using ViewModels。
public class IndexViewModel {
public string TopNav { get; set; }
// other view properties here
}
在您的控制器中:
public ActionResult Index() {
var model = new IndexViewModel {
TopNav = "services",
// set other properties here
}
return View(model);
}
在索引视图中:
@model IndexViewModel
@RenderPage("~/Shared/_Header.cshtml",Model)
_Header.cshtml:
@model IndexViewModel
<h2>@Model.topNav</h2>
要注意的最后一项是考虑使用Shared Layout.cshtml而不是在每个页面中嵌入页眉和页脚。
答案 1 :(得分:1)
其中一个选项是使用ViewBag:
http://weblogs.asp.net/hajan/viewbag-dynamic-in-asp-net-mvc-3-rc-2