【发布时间】:2017-12-06 16:55:41
【问题描述】:
问题是当我尝试同时更新主表和详细表时。
当调用 Post Edit Task 时,Details 对象不会出现。
编辑视图正确显示所有详细信息行,但在调试编辑 POST 时,Casas 为空
模型
public partial class Modelo : IValidatableObject {
public Modelo()
{
Casas = new HashSet<Casa>();
}
public int Modeloid { get; set; }
public string Modelo1 { get; set; }
public virtual ICollection<Casa> Casas { get; set; }//Don’t work to update
}
public partial class Casa // DETAIL TABLE
{
public int Casaid { get; set; }
public int Modeloid { get; set; } // FK to Modelo
public string Casa1 { get; set; }
public virtual Modelo Modelo { get; set; }
}
控制器
public class ModelosController : Controller
. . . . . . . . .
[HttpPost]
[ValidateAntiForgeryToken]
public async Task<IActionResult> Edit(int id, Modelo modelo)
{
if (id != modelo.Modeloid)
{
return NotFound();
}
if (ModelState.IsValid)
{
// Here modelo.Modelo1 has current modified value
// but modelo.Casas.Count == 0
_context.Update(modelo);
await _context.SaveChangesAsync();
}
}
// GET: Modelos/Edit
public async Task<IActionResult> Edit(int? id)
{
if (id == null)
{
return NotFound();
}
var modelo = await _context.Modelo
.AsNoTracking()
.Include(m => m.Fotomodelos)
.Include(m => m.Casas)
.SingleOrDefaultAsync(m => m.Modeloid == id);
if (modelo == null)
{
return NotFound();
}
return View(modelo);
}
查看 EDIT.CSHTML
@using System.IO
@model Disponibilidad.Models.Modelo
<form asp-action="Edit">
<div class="form-horizontal">
<hr />
<div asp-validation-summary="ModelOnly" class="text-danger"></div>
<input type="hidden" asp-for="Modeloid" />
<div class="form-group">
<label asp-for="Modelo1" class="col-md-2 control-label"></label>
<div class="col-md-10">
<input asp-for="Modelo1" class="form-control" />
<span asp-validation-for="Modelo1" class="text-danger"></span>
</div>
</div>
@{
for (int i = 0; i < Model.Casas.Count; i++)
{
<input type="hidden" asp-for="@Model.Casas.ElementAt(i).Modeloid"
value="@Model.Modeloid" />
<input type="hidden" asp-for="@Model.Casas.ElementAt(i).Casaid" />
<div class="form-group">
<label asp-for="@Model.Casas.ElementAt(i).Casa1"
class="col-md-2 control-label"></label>
<div class="col-md-10">
<input asp-for="@Model.Casas.ElementAt(i).Casa1"
class="form-control" /> <!-- DISPLAY OK Detail rows -->
<span asp-validation-for="@Model.Casas.ElementAt(i).Casa1"
class="text-danger"></span>
</div>
</div>
}
}
<div class="btn-group">
<button type="submit" class="btn btn-danger">Save</button>
</div>
</div>
</form>
【问题讨论】:
-
您是否尝试将问题隔离到最小的可重现单元?我的意思是,如果您的假设是 ICollection 的行为不符合您的预期(大概是在阅读文档之后),那么您应该隔离这部分逻辑,以便您可以在没有所有多余代码的情况下提出问题(使更容易帮助你)。如果您执行上述操作并发现实际上 ICollection 确实在您的情况下表现得如此,那么您可以将其从问题列表中划掉,也许这表明来自客户端的 MVC 绑定回有问题?
-
是的,我愿意。谢谢你的建议。
-
当我在调试 Edit Post 时,属性“Collection.count of Detail object”= 0 (cero) Master Table IS class Modelo Detail Table IS class Casa 我正在使用 VisualStudio 2017,EF核心和 MVC 模式在此先感谢
-
检查它是如何被渲染到输出的。要发生绑定,输入的名称应类似于
modelo.propName。我敢打赌,您必须手动更改 Razor 并添加名称和值属性,而不是使用 asp-for taghelper。
标签: c# asp.net-core asp.net-core-mvc entity-framework-core