mvc3剃刀索引页面有两个不同的部分页面。页面模型

时间:2011-04-19 06:29:12

标签: asp.net-mvc asp.net-mvc-3 model razor

我的索引与页面模型一样,接受对象列表

@model List<MyProject.Domain.Object>

@Html.Partial("PickDatePartial") 
@Html.Partial("ObjectPartial", Model)

我的问题出在第一个部分页面内,导致此部分页面接受不是列表而是单个@model MyProject.Domain.Object

我怎样才能实现这一点,在当前情况下,索引页面无法呈现,因为它期望接收对象列表。

提前谢谢。

2 个答案:

答案 0 :(得分:2)

嗯,你可以做的一件快速而又脏的事情是将第一个对象传递给PickDatePartial

@Html.Partial("PickDatePartial", Model.First())

然而,这不是很干净。我建议创建一个包含两个属性的视图模型,1)整个列表,2)由PickDatePartial绑定的那个:

public class IndexViewModel
{
    public List<MyProject.Domain.Object> MyList { get; set; }
    public MyProject.Domain.Object ObjectToBind { get; set; }
}

然后在您的控制器的Index操作中:

public ActionResult Index()
{
    var myList = // instantiate list here
    var viewModel = new IndexViewModel
    {
        MyList = myList,
        ObjectToBind = myList.First() // or whichever you need out of that list
    }

    return View(viewModel);
}

当然,您需要在Index视图中更改模型的类型。现在Index视图如下所示:

@model IndexViewModel

@Html.Partial("PickDatePartial", Model.ObjectToBind) 
@Html.Partial("ObjectPartial", Model.MyList)

答案 1 :(得分:1)

如果“PickDatePartial”需要一个对象,并且你给它一个对象列表,它应该使用哪个对象?

由你来决定做什么。

您可以告诉它使用第一个对象:

@if (Model.Count > 0) {
   @Html.Partial("PickDatePartial", Model[0])
}

或者,您可以为每个对象调用它:

@foreach(var item in Model) {
   @Html.Partial("PickDatePartial", item)

}

可能性无穷无尽。