使部分视图真正可重用

时间:2014-06-10 20:14:33

标签: asp.net-mvc asp.net-mvc-3 asp.net-mvc-4

我的目标是创建一个可以在MVC应用程序中的许多其他视图中使用的局部视图。此部分视图将接受来自父View模型的数据,以用作其模型。

我的问题是我不知道如何将这些数据从父视图的模型发送到局部视图。这是一些代码:

父母视图模型类:

public class TestModel
{
    public int ID { get; set; }
    public string Name { get; set; }
    public GlobalPartialView GPV { get; set; }
}

PARTIAL VIEW'S MODEL CLASS:

public class GlobalPartialView
{
    public string PartialViewString { get; set; }
}

父母观点:

@model TestMVC_CRUD.Models.TestModel

@{
    ViewBag.Title = "Index";
}

<h2>Index</h2>


<div>
    <div>ID: @Model.ID</div>
    <div>Name: @Model.Name</div>
</div>

@Html.Partial("_GlobalPartialView", Model.GPV);

部分视图:

@model TestMVC_CRUD.Models.GlobalPartialView

@{
    ViewBag.Title = "View1";
}

<h2>View1</h2>

<div>Value: @Model.PartialViewString</div>

此代码不起作用。局部视图不接受Model.GPV作为其模型。

如何将子对象从父View模型发送到局部视图以用作其模型?此外,如果有更好的方法来实现这一目标,我很乐意听到它。

1 个答案:

答案 0 :(得分:1)

此代码应该有效。在渲染父视图时,您似乎忘记填充主视图模型的GPV属性。你只是得到一个NRE,因为你的部分视图正在访问@Model.PartialViewString

确保呈现父视图的控制器操作实际填充GPV属性:

var model = new TestModel();
model.GPV = new GlobalPartialView();
model.GPV.PartialViewString = "The foo bar";
return View(model);