为什么更新模型()不更新我的模型!在 MVC 中 ASP.NET 嵌套的 IList

本文关键字:更新 模型 嵌套 NET IList Object ASP MVC 我的 为什么 | 更新日期: 2023-09-27 18:30:50

模型 :

public class Category
  {
    [Key]
    public int Categoryid { get; set; }
    [Required , StringLength(50)]
    public string Categoryname { get; set; }
    public virtual IList<SubCategory> SubCategories { get; set; }
  }
  public class SubCategory
  {
    [Key]
    public int SubCategoryid { get; set; }
    [Required, StringLength(50)]
    public string SubCategoryname { get; set; }
    public int Categoryid { get; set; }
    public SubCategory( string name)
    {
        SubCategoryname = name;
    }
    public SubCategory()
    {          
    }
  }

控制器

[HttpPost]
public ActionResult Edit(Category CatModifications, int id, string txtSub, string SubCreate, string SaveAll)
{
  Category Cat = context.Categories.Single(model => model.Categoryid == id);
  UpdateModel(Cat, new string[] { "Categoryname" });
    if (ModelState.IsValid)
    {
      // Create Sub
      if (SubCreate != null)
      {
        if (txtSub != "")
        {
          context.SubCategories.Add(new SubCategory(txtSub) { Categoryid = Cat.Categoryid });
          context.SaveChanges();
        }
        return RedirectToAction("Edit");
      }
      if (SaveAll != null)
      {               
        // Edit Sub/Cat
        for (int i = 0; i < Cat.SubCategories.Count; i++)
        {
          UpdateModel(Cat, new string[] { "SubCategories["+i+"].SubCategoryname" });<---------- Here my Model dont update with my subcat
        }
        context.Entry(Cat).State = EntityState.Modified;
        context.SaveChanges();
        return RedirectToAction("index");
      }
    }
    return View();
   }

视图

@using (Html.BeginForm()) {
@Html.ValidationSummary(true)
  <div>
    @Html.LabelFor(model => model.Categoryname)<br/>
    @Html.EditorFor(model => model.Categoryname)
  </div>

  <div>
    @if (Model != null && Model.SubCategories != null)
    {
      @Html.LabelFor(model => model.SubCategories)<br/>
      for (int i = 0; i < Model.SubCategories.Count; i++)
       {
         <input type="text" name="SubCategories[@i].SubCategoryname" value="@Model.SubCategories[@i].SubCategoryname"/>
         //@Html.EditorFor(model => model.SubCategories[i].SubCategoryname)
         @Html.ActionLink("Delete", "DeleteSub", "Categories", new {SubId = Model.SubCategories[i].SubCategoryid}, null)<br/>
       }
    <input type="text" value="" name="txtSub"/>
    <input type="submit" value="Create SubCategory" name="SubCreate"/>
    }
  </div>
  <div>
  <input type="submit" value="Save" name="SaveAll" />
  </div>
}
<div class="Back-Button">
    @Html.ActionLink("Back to List", "Index")
</div>

-

所以! 我的非嵌套列表属性(类别名称)

更新良好,但不是我的嵌套列表一(子类别[i]子类别名称)...任何人都知道为什么或我在这里做错了?很多...

为什么更新模型()不更新我的模型!在 MVC 中 ASP.NET 嵌套的 IList<Object>

在构造函数中初始化public virtual IList<SubCategory> SubCategories { get; set; }

<input name="SubCategories[@i].SubCategoryname" value="@Model.SubCategories[@i].SubCategoryname"/>

好的,IM 绑定数据的方式正在工作....证明 :

请求.表单.所有键.到列表 = 类别名称,子类别[0]。子类别名称,txtSub,保存全部

物有所值....

它只是当我做更新模型时,它不起作用.....

我得到了一个包含更改(猫修改)机智 ID 的类别......我去一只猫,知道更改(猫),但里面有id

所以我想通过猫修改的变化来更新"猫"

UpdateModel(Cat, new string[] { "SubCategories["+i+"].子类别名称" , "类别名称" })

类别

名称有效,但子类别无效["+i+"]。子类别名称...我知道价值在其中....那么为什么它不更新它.....

相关文章: