填充局部视图

时间:2011-03-07 04:13:29

标签: asp.net-mvc-3

我觉得这很愚蠢,但我似乎无法在页面中获得局部视图渲染。

我创建了一个部分视图,我试图加载到我的索引页面。我已经将我的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");
    }

然而,他们都没有被击中。我做错了什么?

3 个答案:

答案 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 之前,请先填写它。