2011-03-24 44 views
4

我有一個模型的列表屬性foreach循環查看。現在,我希望能夠讓用戶使用下拉列表設置列表中每個項目的值。但我不知道該怎麼做。我用這樣的事情時,它不是在foreach循環:在Asp.Net MVC視圖中使用dropdownlist for foreach?

@Html.DropDownListFor(model => model.Level, new SelectList(new[] { 1, 2, 3, 4, 5 }, Model.Level)) 

但是我怎麼做到這一點的時候,我需要引用item.Level在循環呢?這裏是我查看代碼:

<div id="formDiv"> 
    @using (Html.BeginForm(null, null, FormMethod.Post, new { id = "myForm" })) 
    { 
     @Html.ValidationSummary(true) 
     <fieldset> 
      <legend>Ny arbetserfarenhet</legend> 
      <table> 
       <tr> 
        @*<th></th>*@ 
        <th> 
         Program 
        </th> 
        <th> 
         Nivå 
        </th> 
       </tr> 
       @foreach (var item in Model) { 
        <tr> 
         <td> 
          @item.Program.Name 
         </td> 
         <td> 

          @item.Level 
         </td> 
        </tr> 
} 
      </table> 
     </fieldset> 
    } 
</div> 

回答

7

我有一個foreach循環的模式列表屬性查看

我建議你避免在你的視圖中編寫循環來支持編輯器模板。所以:

@model IEnumerable<AppName.Models.ModelName> 
<div id="formDiv"> 
    @using (Html.BeginForm(null, null, FormMethod.Post, new { id = "myForm" })) 
    { 
     @Html.ValidationSummary(true) 
     <fieldset> 
      <legend>Ny arbetserfarenhet</legend> 
      <table> 
       <tr> 
        <th> 
         Program 
        </th> 
        <th> 
         Nivå 
        </th> 
       </tr> 
       @Html.EditorForModel() 
      </table> 
     </fieldset> 
    } 
</div> 

,並在相應的編輯器模板(~/Views/Shared/EditorTemplate/ModelName.cshtml):

@model AppName.Models.ModelName 
<tr> 
    <td>@Model.Program.Name</td> 
    <td> 
     @Html.DropDownListFor(
      model => model.Level, 
      new SelectList(
       Enumerable.Range(1, 5).Select(x => new { Value = x, Text = x }), 
       "Value", 
       "Text" 
      ) 
     ) 
    </td> 
</tr> 

所以編輯模板將被渲染爲模型中的每個元素(這是某種類型的集合)。重要的部分是編輯器模板必須位於~/Views/Shared/EditorTemplates中,並命名爲XXX.cshtml,其中XXX是您的主視圖模型集合中使用的類型名稱。

+0

感謝您的提示!是不是使用for循環的原因,它是這樣更優雅,或者其他一些原因?我可以使用它,但必須將選擇列表更改爲我以前使用的語法,我在列表中列出了一些奇怪的值和文本,否則它的工作正常! – Anders 2011-03-25 09:54:03

+0

@Anders Svensson,原因很多:清晰的視圖,較少的代碼,強類型的幫助者,不需要擔心生成正確的id和名字來綁定回來,... – 2011-03-25 11:05:46

+0

好的,謝謝!無論如何,我意識到我也必須對項目進行分類......這使得這一點變得更加複雜。如果您能夠接受,歡迎您查看我的後續問題:http://stackoverflow.com/questions/5433710/group-a-collection-in-mvc-view-and-update- model-in-controller – Anders 2011-03-25 15:26:14

0

使用的語法如下:

@Html.DropDownListFor(model => model.Level, new SelectList(Model.level as System.Collections.IEnumerable, "VALUE_FIELD", "TEXT_FIELD", YOUR PROPERTY NAME) 
+0

這並不是說問題出在選擇列表的,這是一個事實,即下拉列表是在foreach循環中,所以我不能使用模型=> model.Level語法... – Anders 2011-03-24 15:51:30

4

你試過:

@Html.DropDownListFor(m => item.Level, new SelectList(new[] { 1, 2, 3, 4, 5 }, item.Level)) 
0

MVC將創建循環。只需使用編輯器模板,特殊文件夾中的部分視圖,其餘部分就像魔術一樣。

編輯模板

@model Models.AdditionalAccountingLine 
@Html.HiddenFor(m => m.IsRequired) 
@Html.DropDownListFor(m => m.FieldValue, new SelectList(@Model.FieldValueOptions, "Key", "Value"), "") 

查看

@Html.EditorFor(m => m.AdditionalAccountingLines);