为什么更新模型()不更新我的模型!在 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]子类别名称)...任何人都知道为什么或我在这里做错了?很多...
在构造函数中初始化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+"]。子类别名称...我知道价值在其中....那么为什么它不更新它.....