ASP MVC - ViewBag 从部分到视图
本文关键字:视图 MVC ViewBag ASP | 更新日期: 2023-09-27 17:56:21
>我需要在部分视图中设置ViewBag的属性并在视图中调用。这是我的代码:这是index.cshtml
:
<h2>@ViewBag.Title</h2>
Html.RenderPartial("~/Views/Article/Partial.cshtml");
而这个控制器:
public ActionResult Index(int id)
{
return View(_db.Articles.Find(id));
}
这是Partial.cshtml
:
@model Article
@{
ViewBag.Title = Model.Article.Title;
}
<h2>....</h2>
//html...
根据您上面提供的代码,您似乎正在部分视图中设置 ViewBag.Title,并尝试在索引视图中使用它。这是行不通的。您似乎还想写文章的标题,这部分不会修改页面标题。
您应该考虑要在何处设置标题;无论是在控制器操作中还是在主视图中。下面是一个示例:
控制器
public ActionResult Index(int id)
{
ViewBag.Title = "My Title";
return View(_db.Articles.Find(id));
}
修改您的 Index.cshtml 文件:
Index.cshtml
@model Article
<h2>@ViewBag.Title</h2>
@Html.Partial("_Partial", Model)
然后更新部分。请注意,Razor 引擎足够智能,可以确定要使用哪个 cshtml 文件,因此您无需为其提供完整路径。一般的命名约定是以下划线开头。
_Partial.cshtml
@model Article
<h2>@Model.Title</h2>
...
我不太清楚您的模型是如何设置的,因此您可能想更改它。您还应该考虑为什么选择使用部分文件,而不仅仅是将所有内容构建到索引文件中。
如果想法是页面应该只显示单个文章(Linq 查询似乎暗示了这一点),则可以在单个视图上构建所有内容。下面是一个示例:
提议的索引.cshtml
@{
ViewBag.Title = Model.Title;
}
@model Article
<h2>@Model.Title</h2>
<p>@Model.Content<p>
当然,这只是一个示例,您应该根据需要应用格式。这会将页面标题(在浏览器中)设置为"站点名称 - 文章标题",并在 h2 元素中显示标题。
您调用部分视图的方式是错误的。您的分部视图需要文章模型。像这样Html.Partial("Partial", Model)
更改对部分视图的调用 -- 这里的模型是 Index.cshtml 中可用的模型(这是您从控制器中的 Index 操作方法传递的文章。