2011-05-28 163 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