我觉得这很愚蠢,但我似乎无法在页面中获得局部视图渲染。
我创建了一个部分视图,我试图加载到我的索引页面。我已经将我的pv _BusinessDetails称为一个返回一些客户数据的视图。
我的pv看起来像
@model MyMVC.Models.BusinessModel
<div class="grid">
<div class="grid-header">
<div class="gh-l"></div>
<div class="gh-m">Business Details</div>
<div class="gh-r"></div>
</div>
<div class="grid-row">
<label class="labelBold">Busines Name</label>
<label>@Model.BusinesName</label>
</div>
</div>
从我的索引页面尝试使用
调用pv @Html.Partial("_BusinessDetails")
如果我添加
则会失败@Html.Partial("_BusinessDetails",new MyMVC.Models.BusinessModel())
部分视图已加载但没有数据,因为未命中控制器。在我的控制器中,我尝试了
public ActionResult _BusinessDetails()
{
return PartialView("_BusinessDetails");
}
public PartialViewResult _BusinessDetails()
{
return PartialView("_BusinessDetails");
}
然而,他们都没有被击中。我做错了什么?
答案 0 :(得分:2)
渲染局部视图并传递视图模型时,应该已经填充了该视图模型。使用@Html.Partial()
时,不会调用任何控制器/操作方法。
由于您在主页上使用此强类型部分视图,请考虑在HomeController
的{{1}}方法中构建其视图模型。你的索引页面也是强类型的吗?如果是这样,您可以将局部视图的视图模型添加为索引页面视图模型的属性,并在调用Index()
时传递它。
在索引页面上,它看起来像:
@Html.Partial()
如果你的索引页面没有强类型,你可以使用@model MyMVC.Models.IndexViewModel
<!-- some HTML here -->
@Html.RenderPartial("_BusinessDetails", Model.BusinessModel)
对象,或者你可以强力输入ViewBag
并使用MyMVC.Models.BusinessModel
(虽然简单,可以造成混乱)。
如果你想了解更多信息,Rachel Appel和blog post一样好Mike Brind。
答案 1 :(得分:0)
这很棘手。我在主视图上使用模型作为容器对象取得了成功:
class MainPageModel {
public BusinessDetailModel BusinessDetails { get; set; }
// ...
}
然后将整个模型(如@Html.Partial("_BusinessDetails", Model)
)传递给我的部分视图。
答案 2 :(得分:0)
当你写这篇文章时,
@Html.Partial("_BusinessDetails",new MyMVC.Models.BusinessModel())
由于您的模型为空,因此未加载数据,因此在传递模型 BusinessModel 之前,请先填写它。