Razor 输入隐藏显示不正确的Id(Guid.Empty)

Razor 输入隐藏显示不正确的Id(Guid.Empty),razor,model,asp.net-mvc-4,Razor,Model,Asp.net Mvc 4,我想有一个输入(隐藏)字段,存储某个实体的Id 但是这个代码: @Html.HiddenFor(model => model.Id) 此HTML标记中的结果: <input id="Id" name="Id" type="hidden" value="00000000-0000-0000-0000-000000000000" /> 为什么视图引擎决定放置这些零而不是正确的Id 编辑:我没有添加原始代码,因为它非常复杂,但这里有一个超级简单的示例,显示了几乎相同的行为(它使用

我想有一个输入(隐藏)字段,存储某个实体的Id

但是这个代码:

@Html.HiddenFor(model => model.Id)
此HTML标记中的结果:

<input id="Id" name="Id" type="hidden" value="00000000-0000-0000-0000-000000000000" />
为什么视图引擎决定放置这些零而不是正确的Id

编辑:我没有添加原始代码,因为它非常复杂,但这里有一个超级简单的示例,显示了几乎相同的行为(它使用空字符串,而不是输入值中的Guid.empty):

视图:

型号:

using System;

namespace MvcApplication4.Models 
{
    public class Foo
    {
         public Guid? Id { get; set; }
    }
}

问题当然是在事后处理后可见的。

这就解释了一切。您正遇到与中的其他人相同的问题。请查看已接受的答案及其注释,因为它与您的问题相关。

以及调用视图的控制器操作代码模型或操作方法中没有什么有趣的东西,除了Id是可为null的Guid。您想要答案,但不想提供相关代码供我们查看。。。令人惊叹的。无论如何,因为它是可以为null的,所以在传递到视图时可能为null。这将使
Model.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; }
    }
}