Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何发布包含ICollection编辑器模板的表单?_C#_Asp.net Mvc - Fatal编程技术网

C# 如何发布包含ICollection编辑器模板的表单?

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

我正在使用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 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);
    }