我想要一个输入(隐藏)字段来存储某个实体的 Id ...
但是这段代码:
@Html.HiddenFor(model => model.Id)
生成此 HTML 标记的结果:
<input id="Id" name="Id" type="hidden" value="00000000-0000-0000-0000-000000000000" />
这很奇怪,因为我敢肯定Model.Id != Guid.Empty。我可以通过注入@Model.IdHTML 来确认它。这工作正常:
<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; }
    }
}
在后期操作之后问题当然是可见的。