2012-12-26 28 views
5

我想有一个输入(隐藏)字段存储一些实体的标识...输入隐藏显示不正确的ID(Guid.Empty)

但这代码:

@Html.HiddenFor(model => model.Id) 

结果在这HTML标记:

<input id="Id" name="Id" type="hidden" value="00000000-0000-0000-0000-000000000000" /> 

,因为我敢肯定,Model.Id != Guid.Empty这很奇怪。我可以通过将@Model.Id注入HTML来确认它。这工作正常:

<input type="hidden" id="Id" name="Id" value="@Model.Id" /> 

为什么视图引擎决定把这些零而不是正确的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; } 
    } 
} 

问题当然可以在发布后执行。

+0

我可以看到你的模型吗? –

+0

以及调用视图的控制器操作代码 – MarkG

+0

除了Id可以为空的Guid之外,模型或操作方法中没有任何有趣的内容。 – user1068352

回答

5

这就解释了一切。您遇到与this question中的其他人相同的问题。请参阅接受的答案和对其的评论,因为它与您的问题有关。