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...

ASP MVC - ViewBag 从部分到视图

根据您上面提供的代码,您似乎正在部分视图中设置 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 操作方法传递的文章。