2011-12-06 81 views
1

我有一個情況我需要在一個視圖模型編輯枚舉屬性:編輯IEnumerable的模型屬性在MVC視圖

public class ViewModel 
{ 
    public MyObj Obj { get; set; } 
    public IEnumerable<MyObj> MyObjs = new List<MyObj>(); 
} 

我按照this後;控制器動作:

public ActionResult Index() 
{ 
    var viewModel = new ViewModel(); 
    viewModel.Obj = new Obj() { Name = "0", Value = true }; 
    var o1 = new MyObj() { Name = "1", Value = false }; 
    var o2 = new MyObj() { Name = "2", Value = false }; 
    viewModel.Objs = new List<Obj>() { o1, o2 }; 

    return View(viewModel); 
} 

[HttpPost] 
public ActionResult Index(ViewModel viewModel) 
{ 
    return View(viewModel); 
} 

索引視圖如下:

<% using (Html.BeginForm()) { %> 

    <table> 
     <tr> 
      <th>Name</th> 
      <th>Value</th> 
     </tr> 
     <%= Html.EditorFor(x => x.Objs) %> 
    </table> 

    <br /> 

    <input type="submit" value="Submit" /> 

<% } %> 

而在 「〜/查看/主頁/ EditorTemplates/Obj.ascx」 編輯模板:

<tr> 
     <td><%: Html.TextBoxFor(x => x.Name) %></td> 
     <td><%: Html.CheckBoxFor(x => x.Value) %></td> 
    </tr> 

的問題是:瀏覽到索引,數據顯示出來。 POST和可枚舉數據消失。逐步瀏覽,視圖模型中的單數「Obj」仍然存在,因此它只是可消失的可枚舉數據。

我一直在盯着這個一段時間,如果有人能幫上忙,那就太棒了。

乾杯,

Tim。

回答

0

看看菲爾哈克的this post,MVC2本身不支持將列表綁定到視圖模型,除非您進行一些操作。

更新:我已經仔細研究了這一點,並認爲您應該嘗試將TryUpdateModel(viewModel.MyObjs, "MyObjs");添加到您的控制器。這會通知模型綁定器它應該使用「MyObjs」綁定前綴將表單中的數據附加到ViewModel中的集合中。

+0

我能夠在這篇文章中發現的唯一區別是使用「for」語句。這不會產生任何不同的HTML或任何不同的結果。 – Hanshan

+0

您是否檢查過在您的視圖中生成的HTML?所有的Obj編輯器都有相同的名稱/編號嗎?它們應該使用索引器生成(即'') –

+0

再次感謝您的幫助,Stephen。不幸的是,它們似乎是正確的 - 例如名稱=「MyObjs [0] .Name」和「MyObjs [1] .Name」 - 因此我不知道! – Hanshan

相關問題