0

想象一下,您已将模型发送到视图...您正试图在编辑此模型后对其进行保存。如果您没有写出所有字段(例如标识对象),它们会以某种方式重置为零或空(如果它是字符串)。我所做的是写出一个隐藏字段,以便当我尝试保存这个对象时,我能够识别它是哪个对象......

这是好形式吗?还是我错过了一步?

4

2 回答 2

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>
}
于 2012-06-04T19:25:41.963 回答
0

这可以。只要他们不会编辑对象身份,您就可以使用 id 作为隐藏输入。

如果您懒得写出所有字段,我还建议您查看 automapper。

于 2012-06-04T19:20:13.527 回答