想象一下,您已将模型发送到视图...您正试图在编辑此模型后对其进行保存。如果您没有写出所有字段(例如标识对象),它们会以某种方式重置为零或空(如果它是字符串)。我所做的是写出一个隐藏字段,以便当我尝试保存这个对象时,我能够识别它是哪个对象......
这是好形式吗?还是我错过了一步?
想象一下,您已将模型发送到视图...您正试图在编辑此模型后对其进行保存。如果您没有写出所有字段(例如标识对象),它们会以某种方式重置为零或空(如果它是字符串)。我所做的是写出一个隐藏字段,以便当我尝试保存这个对象时,我能够识别它是哪个对象......
这是好形式吗?还是我错过了一步?
如果你已经在文件头的视图中指定了你的模型类型,并且你正在使用Html.BeginForm
辅助方法,我很确定它已经为你发送了 id。
编辑:我测试了它,它是正确的。Html.BeginForm 方法创建了输出
<form action="/Product/Edit/1" method="post">
这就是它发送 id 的原因。
这是我用来测试它的控制器:
using System.Web.Mvc;
using MvcApplication2.Models;
namespace MvcApplication2.Controllers
{
public class ProductController : Controller
{
public ActionResult Edit(int id)
{
return View(new Product { Id = 1, Name = "Test"});
}
[HttpPost]
public ActionResult Edit(Product product)
{
return Edit(product.Id);
}
}
}
和视图:
@model MvcApplication2.Models.Product
@using (Html.BeginForm()) {
<fieldset>
<legend>Product</legend>
<div class="editor-label">
@Html.LabelFor(model => model.Name)
</div>
<div class="editor-field">
@Html.EditorFor(model => model.Name)
@Html.ValidationMessageFor(model => model.Name)
</div>
<p>
<input type="submit" value="Save" />
</p>
</fieldset>
}
这可以。只要他们不会编辑对象身份,您就可以使用 id 作为隐藏输入。
如果您懒得写出所有字段,我还建议您查看 automapper。