2013-08-05 33 views
0

我已經定義了模型作爲如下─如何將ICollection屬性綁定到MVC4視圖?

public class Question 
{ 
    public int Id { get; set; } 
    public string Title { get; set; } 
    public int UserSelection { get; set; } 

    public Question() 
    { 
     this.Options = new List<Option>(); 
    } 
    public virtual ICollection<Option> Options { get; set; }   
} 

由於ICollection不具有索引,我在結合ICollection Options到視圖面臨的問題。

@model List<LakshyaMvc.Models.Question> 

<ol class="Quest"> 
      @for (int i = 0; i < Model.Count; i++) 
      { 
       var quest = Model[i]; 
       <li> 
        @Html.LabelFor(x => quest.Title, quest.Title) 
        <ol class="Opt"> 
         @for (int j = 0; j < quest.Options.Count; j++) 
         { 
      @*Indexer not availabl here *@ 
          <li class="Opt"> 
           @Html.RadioButtonFor(o => quest.Options[j].Title, quest.Options[j].Title, new { @name = "uniqueRadio" }) 
          </li> 
         } 
        </ol> 
       </li> 

      } 
     </ol> 

我要調整的臨時解決方案是創建顯示選項的局部視圖。 定義如下模型 -

@model List<LakshyaMvc.Models.Option> 

這是ICollection的綁定到視圖正確&一般方法?

+1

任何您無法將其更改爲索引器的原因?說......一個「列表」? –

+0

@autrevo,檢查我的編輯 –

+0

@SimonWhitehead,在收集CRUD操作的情況下,ICollection更適合於修改集合。列表和IEnumarables主要適用於迭代列表項。 – Abhijeet

回答

0

只給你一個不同的預期,一個乾淨的解決方案是使用EditorTemplates(將擺脫所有的循環),所以它是這樣的:

@model List<LakshyaMvc.Models.Question> 

<ol class="Quest"> 
    @Html.EditorForModel() 
</ol> 

然後去上創建相應的EditorTemplate下 - ~/Views/Shared/EditorTemplates/Question.cshtml

@model LakshyaMvc.Models.Question 

<li class="Opt"> 
    @Html.EditorFor(m => m.Options) 
</li> 

然後淡然的對選項的對應EditorTemplate:

~/Views/Shared/EditorTemplates/Option.cshtml

@model LakshyaMvc.Models.Option 
@Html.RadioButtonFor(m => m.Title, Model.Title, new { @name = "uniqueRadio" }) 
+0

這將生成重複的id和名稱的HTML元素。 –

相關問題