您好我无法使用实体框架更新我的产品。 当我从开发人员的工具提交表单时,我可以确认表单正在发送[0] .Id = 3.
但是当我调试模型时,debug.print保持打印0作为Id。
这是我的控制器
public ActionResult Details(IList<Item> model)
{
if (ModelState.IsValid)
{
Debug.Print(model[0].Id.ToString()); //This prints 0
Debug.Print(model[0].Name);// This prints correctly
Debug.Print(model[0].Size);// This prints correctly
Debug.Print(model[0].RetailPrice.ToString());// This prints correctly
Debug.Print(model[0].IsAvailable.ToString());// This prints correctly
for (int i = 0; i < model.Count(); i++)
{
ndb.Entry(model[0]).State = System.Data.Entity.EntityState.Modified;
ndb.SaveChanges();
}
return RedirectToAction("ProductIndex");
}
return View(model);
}
任何人都知道为什么?
编辑:
using (Html.BeginForm())
{
@Html.AntiForgeryToken()
<table>
<thead>
<tr>
<td>Name</td>
<td>Size</td>
<td>Price</td>
<td>Available</td>
</tr>
</thead>
@for (int i = 0; i < Model.Count(); i++)
{
<tr>
@Html.HiddenFor(m => m[i].Id)
@Html.HiddenFor(m => m[i].Name)
@Html.HiddenFor(m => m[i].Size)
@Html.HiddenFor(m => m[i].RetailPrice)
<td>
@Model[i].Name
</td>
<td>
@Model[i].Size
</td>
<td>
@Model[i].RetailPrice
</td>
<td>
@Html.CheckBox("["+i+"].IsAvailable", Model[i].IsAvailable)
</td>
</tr>
}
<tr>
<td>
<input type="submit" value="Save" class="btn btn-default" />
</td>
</tr>
</table>
}
正如我之前提到的,开发人员工具提交的表单显示了正确的ID,但是当它出现在控制器上时,它总是给我0作为Id。
答案 0 :(得分:0)
您可能错过了视图中的ID
字段。您应该在View as hidden字段中添加ID
字段或将其绑定到属性。
也不建议在视图中使用EF对象。改为创建自定义视图模型。
答案 1 :(得分:0)
尝试更改
@Html.HiddenFor(m => m[i].Id)
到下面(两个或第二个都应该工作.Haven验证了它。但你需要使用Model
)
@Html.HiddenFor(@Model[i].Id)
OR
@Html.HiddenFor(m => Model[i].Id)