2013-04-15 18 views
1

我与ASP.NET MVC 4工作,我有以下型号:如何发布包含编辑模板的ICollection的一种形式?

public class MultiLanguageText 
{ 
    [Key] public int Id { get; set; } 
    [Required] public string Name { get; set; } 
    public virtual ICollection<LocalizedText> LocalizedTexts { get; set; } 
} 

public class LocalizedText 
{ 
    [Key] public int Id { get; set; } 
    [ForeignKey("Language")] public int LanguageId { get; set; } 
    public virtual Language Language { get; set; } 
    [ForeignKey("MultiLanguageText")] public int MultiLanguageTextId { get; set; } 
    public virtual MultiLanguageText MultiLanguageText { get; set; } 
    public string Text { get; set; } 
} 

我试图创建一个MultiLanguageText编辑观点也将包含在LocalizedTexts属性为每个项目的编辑器。形式是这样的:

@using (Html.BeginForm("Edit", "MultiLanguageText", FormMethod.Post)) { 
    @Html.ValidationSummary(true) 
    <fieldset> 
     <legend>MultiLanguageText</legend> 
     @Html.HiddenFor(model => model.Id) 
     <div class="editor-label"> 
      @Html.LabelFor(model => model.Name) 
     </div> 
     <div class="editor-field"> 
      @Html.EditorFor(model => model.Name) 
      @Html.ValidationMessageFor(model => model.Name) 
     </div> 
     @Html.EditorFor(model => model.LocalizedTexts) 
     <p> 
      <input type="submit" value="Save" /> 
     </p> 
    </fieldset> 
} 

我创建(文件~/Views/Shared/EditorTemplates/LocalizedText.cshtml中)编辑模板如下:

<fieldset> 
    <legend>LocalizedText</legend> 
    @Html.HiddenFor(model => model.Id) 
    <div class="editor-label"> 
     @Html.LabelFor(model => model.LanguageId) 
    </div> 
    <div class="editor-field"> 
     @Html.EditorFor(model => model.LanguageId) 
     @Html.ValidationMessageFor(model => model.LanguageId) 
    </div> 
    <div class="editor-label"> 
     @Html.LabelFor(model => model.MultiLanguageTextId) 
    </div> 
    <div class="editor-field"> 
     @Html.EditorFor(model => model.MultiLanguageTextId) 
     @Html.ValidationMessageFor(model => model.MultiLanguageTextId) 
    </div> 
    <div class="editor-label"> 
     @Html.LabelFor(model => model.Text) 
    </div> 
    <div class="editor-field"> 
     @Html.EditorFor(model => model.Text) 
     @Html.ValidationMessageFor(model => model.Text) 
    </div> 
</fieldset> 

我与一些预先存在的价值和测试所有当显示页面时,数据会在父级和子级编辑器中正确显示。然而,当我提交表单,里面任何一个子编辑完成的所有变化都将被忽略。

HttpPost方法是这样的:

[HttpPost] 
    public ActionResult Edit(MultiLanguageText multilanguagetext) 
    { 
     if (ModelState.IsValid) 
     { 
      db.Entry(multilanguagetext).State = EntityState.Modified; 
      db.SaveChanges(); 
      return RedirectToAction("Index"); 
     } 
     return View(multilanguagetext); 
    } 

我的问题是:如何让这个所有值都贴出来,同时从父模型及其子模型编辑?(我见过的其他类似的问题存在,但我已经试过他们的解决方案,他们似乎并没有解决我的问题。)

+0

你能提供一点的更多信息?发布的键/值对是什么样的?该集合是否已填充,但具有默认值?或者它是空的?或者它是空的? – StriplingWarrior

+0

我和种子值,其中集合不为空测试。数据从数据库中成功检索。编辑器模板正确显示并显示正确的值。问题是在提交表单时,集合中的任何更改都不会保存。 –

回答

0

经过一番艰难的,这是我找到工作的解决方案:

[HttpPost] 
    public ActionResult Edit(MultiLanguageText multilanguagetext) 
    { 
     if (ModelState.IsValid) 
     { 
      db.Entry(multilanguagetext).State = EntityState.Modified; 
      foreach (var local in multilanguagetext.LocalizedTexts) db.Entry(local).State = EntityState.Modified; 
      db.SaveChanges(); 
      return RedirectToAction("Index"); 
     } 
     return View(multilanguagetext); 
    } 
0

我测试你的问题。我认为它已经完成并且发布了所有值。但我认为你需要提供更多的信息来解决您的问题

+0

是不是真的有别的不多于这个项目,因为它是我使用的学习MVC的测试项目。有什么具体的你怀疑我应该包括在问题中? –

相关问题