【问题标题】:Input hidden shows incorrect Id (Guid.Empty)输入隐藏显示不正确的 ID (Guid.Empty)
【发布时间】:2012-12-26 16:11:39
【问题描述】:

我想要一个输入(隐藏)字段来存储某个实体的 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.Id 注入 HTML 来确认它。这工作正常:

<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; }
    }
}

问题在发布操作后当然是可见的。

【问题讨论】:

  • 以及调用视图的控制器动作代码
  • 除了 Id 可以为空的 Guid 之外,模型或操作方法没有什么有趣的。
  • 你想要答案,但又不想提供相关代码给我们看……太棒了。无论如何,由于它可以为空,因此在传递给视图时它可能为空。这将使Model.Id != Guid.Empty 仍然正确

标签: razor model asp.net-mvc-4


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-29
    • 2013-07-23
    相关资源
    最近更新 更多