ASP MVC - ViewBag从局部到视图

时间:2016-07-11 08:03:42

标签: c# asp.net-mvc razor viewbag

我需要在局部视图中设置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...

2 个答案:

答案 0 :(得分:3)

根据您在上面提供的代码,您似乎在部分视图中设置ViewBag.Title,并尝试在Index视图中使用它。这不会奏效。您似乎也想要撰写文章的标题,这部分内容不会修改页面标题。

你应该考虑你想要设置标题的位置;在控制器操作中或在主视图中。这是一个例子:

<强>控制器

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

我不太清楚你的模型是如何设置的,所以你可能想要改变它。您还应该考虑为什么选择使用partial而不是仅将所有内容都构建到索引文件中。

如果想法是页面应该只显示一篇文章(Linq查询似乎暗示的那样),你可以在一个视图上构建它。这是一个例子:

建议使用Index.cshtml

@{
    ViewBag.Title = Model.Title;
}

@model Article

<h2>@Model.Title</h2>
<p>@Model.Content<p>

当然,这只是一个示例,您应该根据需要应用格式。这会将页面标题(在浏览器中)设置为&#34;站点名称 - 文章标题&#34;,并在h2元素中显示标题。

答案 1 :(得分:0)

The way you're calling the partial view is wrong. Your partial view expects an Article model. Change your call to partial view like this Html.Partial("Partial", Model) -- Model here is the model thats available in Index.cshtml(which is Article you passed from your Index action method in your controller.