エンティティの ID を格納する入力 (非表示) フィールドが必要です...
しかし、このコード:
@Html.HiddenFor(model => model.Id)
この HTML マークアップは次のようになります。
<input id="Id" name="Id" type="hidden" value="00000000-0000-0000-0000-000000000000" />
私はそれを確信しているので、これは奇妙ですModel.Id != Guid.Empty
。HTMLに挿入することで確認でき@Model.Id
ます。これはうまくいきます:
<input type="hidden" id="Id" name="Id" value="@Model.Id" />
View Engine が正しい ID の代わりにこれらのゼロを配置することを決定したのはなぜですか?
編集: 非常に複雑なため、元のコードは追加しませんでしたが、ほぼ同じ動作を示す非常に単純なサンプルを次に示します (入力値に Guid.Empty ではなく空の文字列を使用します)。
意見:
@using MvcApplication4.Models
@model Foo
@using (Html.BeginForm())
{
@Html.HiddenFor(model => model.Id)
@Model.Id
<input type="submit" value="ok" />
}
コントローラ:
namespace MvcApplication4.Controllers
{
public class HomeController : Controller
{
[HttpGet]
public ActionResult Index()
{
Foo foo = new Foo();
return View(foo);
}
[HttpPost]
public ActionResult Index(Foo foo)
{
foo.Id = Guid.NewGuid();
return View(foo);
}
}
}
モデル:
using System;
namespace MvcApplication4.Models
{
public class Foo
{
public Guid? Id { get; set; }
}
}
問題はもちろん、投稿アクションの後に表示されます。