2010-07-12 72 views
0

假设我在一个视图模型已通过与多个地址如何使用TextBoxFor更新

我期待写一个视图像这样(简体)

一个人记录的关系的许多方面
<% foreach (var addr in Model.PERSON.ADDRESSES) { %> 
    <li> 
     <%: Html.TextBoxFor(m => addr.Add1)%> 
    </li> 
<% } %> 

然而,每个生成的Textbox都具有相同的ID和Name属性,并且毫不奇怪,控制器代码无法对模型进行任何更新。

[HttpPost] 
public ActionResult Edit(int id, FormCollection collection) 
{ 
    MyViewModel viewmodel = GenerateViewModel(id); 
    try 
    { 
     UpdateModel(viewmodel); 
     _MyRepository.Save(); 
     return View(viewmodel); 
    } 
    catch 
    { 
     return View(viewmodel); 
    } 
} 

我在猜测我正在讨论这个错误的方法:任何线索将不胜感激!

回答

0

您可以使用编辑器模板。

控制器:

public ActionResult Index() 
{ 
    var model = new MyViewModel(); 
    model.PERSON = FetchPerson(); 
    return View(model); 
} 

[HttpPost] 
public ActionResult Edit(MyViewModel model) 
{ 
    _MyRepository.Save(model); 
    return View(model); 
} 

查看:为地址

<ul> 
    <%: Html.EditorFor(x => x.PERSON.ADDRESSES) %> 
</ul> 

编辑模板(~/Shared/Views/EditorTemplates/ADDRESS.ascx):

<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<SomeNs.ADDRESS>" %> 

<li> 
    Street: <%: Html.EditorFor(x => x.Street) %> 
</li> 
+0

这几乎是正确的。我认为你的第一个ActionResult应该是Edit()?因此,我得到控制呈现与似是而非的名字 - PERSON.ADDRESSES [1] .Street但试图保存时出现错误 System.InvalidOperationException未处理用户代码 消息= EntityCollection已被初始化。只应调用InitializeRelatedCollection方法来在对象图的反序列化过程中初始化新的EntityCollection。 (from myModel.Designer.cs EntityCollection

ADDRESSES setter) – Andiih 2010-07-13 09:13:05

+0

我的错误也在这里解决stackoverflow.com/questions/1064998/...我有一个类似的viewmodel实体图和一些下拉列表。可悲的是,没有发布的解决方案似乎工作(对我或OP) – Andiih 2010-07-13 13:23:54