モデルをビューに送信したと想像してください...編集後にこのモデルを保存しようとしています。すべてのフィールド (たとえば、オブジェクトを識別するフィールド) を書き出さないと、どういうわけかゼロまたは空にリセットされます (文字列の場合)。私がやったことは、隠しフィールドを書き出して、このオブジェクトを保存しようとしたときに、それがどのオブジェクトであるかを識別できるようにすることでした...
これは良いフォームですか?または、ステップがありませんか?
モデルをビューに送信したと想像してください...編集後にこのモデルを保存しようとしています。すべてのフィールド (たとえば、オブジェクトを識別するフィールド) を書き出さないと、どういうわけかゼロまたは空にリセットされます (文字列の場合)。私がやったことは、隠しフィールドを書き出して、このオブジェクトを保存しようとしたときに、それがどのオブジェクトであるかを識別できるようにすることでした...
これは良いフォームですか?または、ステップがありませんか?
ファイルのヘッダーのビューにモデル タイプを指定し、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 を編集しない限り、ID を非表示の入力として使用できます。
また、すべてのフィールドを書き出すのが面倒な場合は、automapper を参照することをお勧めします。