Ric*_*mes 0 model-view-controller asp.net-mvc razor
我需要根据选定的值在我的布局页面中动态设置横幅图像。我一直在研究,但似乎我无法为布局页面设置控制器,所以我一直在考虑使用局部视图,但显然我遗漏了一些东西。我怎样才能做到这一点?
布局页面
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>@ViewBag.Title - My ASP.NET Application</title>
@Styles.Render("~/Content/css")
@Scripts.Render("~/bundles/modernizr")
</head>
<body>
<div class="header">
<div>
@Html.Partial("_Header")
</div>
</div>
<div class="container body-content">
@RenderBody()
<hr />
<footer>
<p>© @DateTime.Now.Year - My ASP.NET Application</p>
</footer>
</div>
@Scripts.Render("~/bundles/jquery")
@Scripts.Render("~/bundles/bootstrap")
@RenderSection("scripts", required: false)
</body>
</html>
Run Code Online (Sandbox Code Playgroud)
局部视图
@model TicketPaymentsAzureMVC.Models.Client
<h1>Header</h1>
<img src="@Url.Content(Model.BannerUrl)" alt="Image" />
Run Code Online (Sandbox Code Playgroud)
小智 6
Using@Html.Partial()不调用控制器方法,只呈现部分中定义的 html。默认情况下,它将模型从主视图传递到局部视图(除非您在第二个参数中指定它),因此除非主视图中的模型是 typeof,否则TicketPaymentsAzureMVC.Models.Client您的代码将引发异常。
如果您使用包含属性的视图模型Client Client(并且您在 GET 方法中填充该属性),那么您可以使用
@Html.Partial("_Header", Model.Client)
Run Code Online (Sandbox Code Playgroud)
将 的实例传递Client给部分。这意味着使用该布局的每个视图都需要该属性。
更好的选择是使用@Html.Action()或@{ Html.RenderAction(); }调用返回部分的服务器方法
[ChildActionOnly]
public ActionResult Header()
{
Client model = ... // initialize your model and set the `BannerUrl` property
return PartialView(_"Header", model);
}
Run Code Online (Sandbox Code Playgroud)
并在布局中
@{ Html.RenderAction("Header", yourControllerName); }
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
7913 次 |
| 最近记录: |