从强类型视图中保存模型

时间:2012-06-04 19:15:50

标签: save asp.net-mvc-3-areas strongly-typed-view

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

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

2 个答案:

答案 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。