2014-10-08 65 views
-1

我的類是模型綁定CheckboxFor與ICollection的

public partial class Team 
    { 
     public Team() 
     { 
      this.Trials = new HashSet<Trials>();    
     } 

     public int TeamId { get; set; } 
     public string TeamName { get; set; } 
     public string TeamDescription { get; set; } 
     public virtual ICollection<Trials> Trials { get; set; } 
    } 

和視圖是

@model Project.Classes.Team 

<td> 
     @for (int i = 0; i < Model.Trials.Count; i++) 
     {     
       @Html.DisplayFor(x => Model.Trials.ElementAt(i).Name) 
       @Html.HiddenFor(x => Model.Trials.ElementAt(i).Name) 
       @Html.HiddenFor(x => Model.Trials.ElementAt(i).TrialID) 
       @Html.CheckBoxFor(x => Model.Trials.ElementAt(i).isChk) 
      <br />    
     } 
</td> 

當視圖顯示它示出了該模型中的試驗對象(3個試驗)(球隊),並顯示錶單,但是當表單發佈然後在控制器中我沒有得到任何價值的試驗它顯示0試驗...我通過改變ICollection IList在類中,但是...團隊類是由EF自動生成,當項目重新運行它忘記了改變,所以我想用ICollection plz來做...

+0

使用這種格式在循環中添加trtd元素:'@ Html.HiddenFor(X => x.Trials [I],請將.Name)' – 2014-10-08 07:24:32

+0

它說不能申請與索引[ ]到IColelction類型的表達式 – Khan 2014-10-08 07:30:11

+0

你說你已經將它改成了'IList',這就是你需要的工作。或者,您可以爲'Trials'創建一個自定義的'EditorTemplate'並使用'@ Html.EditorFor(x => x.Trials)'(無循環) – 2014-10-08 07:36:37

回答

1

在你View/Shared/EditorTemplates文件夾,添加下面的代碼名爲Trials.cshtml新視圖(創建爲局部視圖)

@model YourAssembly.Trial 
@Html.HiddenFor(m => m.ID) 
@Html.HiddenFor(m => m.Name) 
@Html.DisplayFor(m => m.Name) 
@Html.CheckBoxFor(m => m.isChk) 

那麼在你看來,更換@Html.EditorFor(m => m.Trials)

@model Project.Classes.Team 
.... 
@Html.EditorFor(m => m.Trials) 

循環EditorFor將正確命名帶索引器的回收項目,例如它會生成

<input type="hidden" name="Trials[0].ID" ...> 
<input type="hidden" name="Trials[1].ID" ...> 

注意:您真的想在一個表格單元格中顯示整個集合,還是您的意思是每行顯示一個Trial,單獨td元素的顯示名稱和複選框? f,將可以在EditorTemplate

+0

謝謝你非常感謝......我可以排除這個棘手的問題.... pleawse建議我編輯模板的一個巨大的...我知道你在這裏做了什麼,但想知道整個理論.... ..再次感謝 – Khan 2014-10-08 09:13:54

+0

還沒有遇到一個很好的教程,但[本文](http://www.codeguru.com/csharp/.net/net_asp/mvc/using-display-templates-and-editor-templates -in-asp.net-mvc.htm)可能會給你一個更好的理解 – 2014-10-08 09:24:14

+0

Hi Stephen對不起,再次打擾你...如果我需要添加anoth呃編輯器模板相同的試驗類,我想要顯示一個多選擇下拉列表什麼是最好的方法.....我想添加多個試驗在一個團隊使用多選... @ Html.ListBoxFor(模型=> model.TrialID, new SelectList(ViewBag.trials,「TrialID」,「Name」), 新{@class =「selected-select」,data_placeholder =「Select Trials ...」,style =「width: 500px;「,tabindex =」4「} ) – Khan 2014-10-08 12:06:26