2011-05-28 126 views
0

我有一个类型的视图作为项目(我创建一个类)与窗体里面添加项目到我的数据库。该项目类有一个属性叫做分类是一个List(类别有2个属性ID和姓名),在我看来,使用editorforasp.net mvc 3模型具有复杂的属性和复选框

林:

<div> 
    @(Html.EditorFor(e => e.Categories, "Categories"))  
</div> 

我创建了一个名为“Categories.cshtml”的EditorTemplatefor呈现所有可用的类别:

@{ 
    Layout = null; 
} 
@model List<Category> 

@{ 
    foreach (Category category in ((BaseController)this.ViewContext.Controller).BaseStateManager.AvailableCategories) 
    { 
     @Html.Label("test", category.Name) 
     <input type="checkbox" name="Categories" value="@(category.ID)" /> 
    }  
} 

复选框被良好呈现(一个用于在高速缓存中每个可用类别),但点击了一些后,并张榜公布的形式,即时接收我的项目的实例,但与物业类别空。

我需要做什么来接收我的列表类别提交表单后完全实例化?

回答

1

不要循环它。让框架为您生成代码(然后,它会知道如何将其重新构建并将其绑定到您的控制器)。

只需将列表传递给编辑器模板,mvc就可以完成剩下的工作。请在类似的东西上检查我的blog post

+0

谢谢肖恩,真的很有用。我有最后一个疑问,我必须打印所有缓存类别。对于编辑一个项目,我需要显示缓存中的所有类别,但检查了我的项目所具有的类别。你如何解决这个问题?感谢和问候。 – Jose3d 2011-05-28 16:32:54

+0

创建一个视图模型,它将与视图中的内容完全相同。因此,在将模型传递给编辑器之前,复选框的布尔属性应该已经被处理。 – 2011-05-28 16:45:02

0

尝试使用基于索引的循环。这可确保MVC以这种方式呈现项目的属性,以便默认模型联编程序在回发时实例化模型。此外,使用Html助手的复选框以及:

var categories = ((BaseController)this.ViewContext.Controller).BaseStateManager.AvailableCategories; 

for (var index = 0; index < categories.Count; index ++) 
{ 
    @Html.Label("test", categories[index].Name) 
    @Html.Checkbox("ID", categories[index].ID) 
} 
+0

嗨Attadeini,谢谢你的回应。项目呈现,但在回发我收到我的model.Categories = null。你知道为什么吗? Thanks.Jose – Jose3d 2011-05-28 16:43:26