Rup*_*ert 8 .net asp.net razor asp.net-mvc-3
我有一个layout
页面,其中包含需要填充的变量.例:
@ModelType KarateAqua.schoolModel
<html>
<body>
@RenderBody()
<div id="footer">
<div class="content">
<div class="bottom_logo">
<a href="/"><span class="inv">@Model.schoolName</span></a>
</div>
</div>
</div>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)
我不想在每个人中填充这个ActionResult
.有没有办法将数据传递到layout
页面一次,并为所有实例执行此操作?
JBe*_*ton 14
创建一个动作过滤器并装饰您的控制器类.在操作过滤器内部,您可以访问viewbag中可用于布局的值.
这将在每个请求上运行,您不必在每个操作中设置值.您可以查找并忽略诸如子请求和ajax请求之类的内容,这些请求通常不会使用布局,也不会为这些请求设置viewbag值.
下面是我创建的一个属性示例,用于从会话中复制对象,并通过ViewBag使其可用于布局
public class CurrentUserAttribute : ActionFilterAttribute
{
public override void OnResultExecuting(ResultExecutingContext filterContext)
{
// Don't bother running this for child action or ajax requests
if (!filterContext.IsChildAction && !filterContext.RequestContext.HttpContext.Request.IsAjaxRequest())
{
if (filterContext.HttpContext.Session != null)
{
var currentUser = filterContext.HttpContext.Session["CurrentUser"] as CurrentUser;
if (currentUser != null)
{
filterContext.Controller.ViewBag.CurrentUser = currentUser;
}
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
好了,因为您可以在使用局部视图后设置它.但是根据您的需要,您需要有几个部分视图(如果部分将分散在_layout页面中,可能并不理想)
你的局部视图看起来像
@model KarateAqua.schoolModel
<div class="bottom_logo">
<a href="/"><span class="inv">@Model.schoolName</span>
</div>
Run Code Online (Sandbox Code Playgroud)
调节器
public class SchoolController : Controller
{
public ActionResult Index()
{
//get schoolModel
return PartialView(schoolModel);
}
}
Run Code Online (Sandbox Code Playgroud)
在_layout.cshtml中,将此行放在要插入局部视图的位置
@Html.Action("Index","School")
Run Code Online (Sandbox Code Playgroud)
您可以在布局页面上打开一个代码块并在那里填充对象。每次使用布局页面时都会执行此操作。好处是您不必更改控制器上的任何内容:
@{
KarateAqua.schoolModel data = YourBusinessLayer.Method();
}
<html>
<body>
@RenderBody()
<div id="footer">
<div class="content">
<div class="bottom_logo">
<a href="/"><span class="inv">@data.schoolName</span></a>
</div>
</div>
</div>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
37923 次 |
最近记录: |