.Net Razor - 在页面之间共享变量

时间:2014-07-08 21:38:52

标签: c# asp.net razor web

我提前为noob问题道歉。我已经习惯了经典ASP,并且正在使用.Net ASP网页(cshtml)测试水。

我创建了一个包含页眉和页脚的cshtml页面(Index.cshtml)。我使用

包括他们
@RenderPage("~/Shared/_Header.cshtml")
@RenderPage("~/Shared/_Footer.cshtml")

在Index.cshtml的顶部,我想设置一个变量:

var topNav = "services";

我想从页眉和/或页脚访问此变量。我怎么能做到这一点?

2 个答案:

答案 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)