想象一下,您已将模型发送到视图... 您正在尝试在编辑后保存此模型。 如果你没有写出所有字段(例如标识对象),它们会以某种方式重置为零或为空(如果是字符串)。 我做了什么,是写出一个隐藏的字段,这样当我试图保存这个对象时,我能够识别它是哪个对象......
这是好形式吗?或者我错过了一步?
答案 0 :(得分:1)
如果您已将模型类型指定到文件标题上的视图,并且您使用的是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>
}
答案 1 :(得分:0)
这很好。只要他们不编辑对象标识,您就可以将id用作隐藏输入。
如果你懒得写出所有字段,我还建议你看看automapper。