C# 如何发布包含ICollection编辑器模板的表单?
我正在使用ASP.NET MVC 4,我有以下模型:C# 如何发布包含ICollection编辑器模板的表单?,c#,asp.net-mvc,C#,Asp.net Mvc,我正在使用ASP.NET MVC 4,我有以下模型: public class MultiLanguageText { [Key] public int Id { get; set; } [Required] public string Name { get; set; } public virtual ICollection<LocalizedText> LocalizedTexts { get; set; } } public class Localiz
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; }
}
我创建的编辑器模板(在文件~/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]
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);
}
你能提供更多的信息吗?发布的键/值对看起来像什么?是否正在填充集合,但使用默认值?还是空的?或者它是空的?我正在使用种子值进行测试,其中集合不是空的。已成功从数据库检索数据。编辑器模板以正确的值正确显示。问题是,在提交表单时,集合中的任何更改都不会保存。这个项目实际上没有太多其他内容,因为这是一个我用来学习MVC的测试项目。你认为我应该在问题中包括什么具体内容吗?
[HttpPost]
public ActionResult Edit(MultiLanguageText multilanguagetext)
{
if (ModelState.IsValid)
{
db.Entry(multilanguagetext).State = EntityState.Modified;
db.SaveChanges();
return RedirectToAction("Index");
}
return View(multilanguagetext);
}
[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);
}