2013-02-27 72 views
0

我有一個「技能」列表,我希望用戶能夠通過,從列表中選擇適當的級別。所以技能看起來是這樣的:如何在視圖中創建多個模型?最好使用部分視圖和動態數量的模型

public class Skill 
{ 
    public String SkillName { get; set; } 
    public SkillLevel CurrentSkillLevel { get; set; } 
    public Boolean IsRequired { get; set; } 

    public Skill(String Name) 
    { 
     this.SkillName = Name; 
     this.IsRequired = true; 
     this.CurrentSkillLevel = SkillLevel.None; 
    } 
} 

可能有數百個技能 - 和確切人數不明的時刻,當然它必須是動態的,所以我不想讓用戶去通過點擊每項技能,填寫表格並每次提交。我想在同一頁面顯示所有技能(每行一行),允許用戶選擇所有值,然後在最後單擊提交一次。

不幸的是,我已經沒有使用MVC比單身創建的任何其他任何經驗。我通常會爲幾個捆綁在一起的模型使用單獨的ViewModel,但我不明白這是如何與動態列表一起工作的,並且由於它們都是相同的類型(「Skill」),我猜ViewModel看起來完全像模型的列表。

沒有人有一個合適的解決方案?

感謝

上DaveA的回答
+0

我真的不知道如何綁定這個。清楚地遞歸被要求。但是,如何維持這種關係......我很掙扎。答案我給了簡單數組的作品... – 2013-03-12 03:28:48

回答

1

大廈,您可以使用編輯器模板技能。您需要將一個名爲EditorTemplates的文件夾添加到您的Views\Controller文件夾中。現在,請叫Skill.cshtml該文件夾中的局部視圖,看起來像這樣

@model Skill 

@Html.TextBoxFor(s => s.SkillName) 
@Html.TextBoxFor(s => s.Skills[i].Title) 
// etc... 

現在,在你的主視圖

using (Html.BeginForm("UpdateCart", "Orders")) 
{ 

    @Html.TextBoxFor(p=>p.Name) 
    @Html.TextBoxFor(p=>p.Title) 

    @Html.EditorFor(p => p.Skills) 
} 

剃刀是足夠聰明,它會使用技能呈現每個技能在Skills。 cshtml編輯器模板。

+0

我喜歡這個實現 – 2013-02-27 22:14:18

+0

我可以只檢查這些文件的放置位置嗎?我有一個名爲「Skill」的控制器,所以我現在擁有Views/Skill/EditorTemplates/Skills.cshtml。該模板似乎不包括使用行@ Html.EditorFor(p => p.Skills)。有沒有需要檢查的設置(例如是否使用Razor)?對不起,如果這是一個新手問題!並感謝您的幫助。 – user1711233 2013-02-28 10:00:29

+0

MVC中有許多看起來像魔術的東西。它會看到「技能」是一個「IEnumerable 」,因此它將在EditorTemplates文件夾中查找名稱爲Skill.cshtml或「@model Skill」的文件,我不記得是哪一個。另外請注意,文件名應該是'Skill.cshtml',而不是'Skills.cshtml'。我會更新我的答案。 – cadrell0 2013-02-28 14:25:29