HiddenFor缺失值标记

时间:2013-07-09 10:30:21

标签: asp.net-mvc razor

我有一个HiddenFor字段,它缺少它的值标记。这是使用剃刀视图引擎的MVC4项目。

<input name="Id" id="teamId" type="hidden" data-val-required="The Id field is required." data-val-number="The field Id must be a number." data-val="true"/>

这是从:

生成的
@Html.HiddenFor(m => m.Id, new { id = "teamId" })

从我的模型(使用System.ComponentModel.DataAnnotations):

public class TeamModel
{
    public int Id { get; set; }
    [Required(ErrorMessage = "Please enter a team name"), MaxLength(25)]
    public string Name { get; set; }
}

将新模型传递给表单时,我甚至尝试手动设置Id字段,如下所示:

return PartialView("EditTeam", new TeamModel{Id = 5});

但是仍然没有显示值。奇怪的是,它正在通过客户端验证,但未通过服务器端验证。我在另一个项目中有类似的设置,工作正常。我看不出他们之间有什么不同。我错过了一些明显的东西吗?谢谢:))

编辑: 如果我使用:

@Html.Hidden("test", Model.Id)

有效。使用HiddenFor的东西是将值设置为空白(看到原始HTML值字段在那里但只设置为:value =“”)

编辑: 为了完整起见,这里是控制器(也是问题的根源):

public ActionResult GetTeam(int? id)
{
    return PartialView("EditTeam", id.HasValue ? _teamLogic.GetById(id.Value) : new TeamModel());
}

3 个答案:

答案 0 :(得分:0)

你试过了吗?

@Html.HiddenFor(m => m.Id, new { id = "teamId", value=Model.Id })

答案 1 :(得分:0)

为什么需要第二个参数?

@Html.HiddenFor(m => m.Id, new { id = "teamId" })

如果从控制器正确返回模型,这就足够了:

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

答案 2 :(得分:0)

我会在这里回答我自己的问题,因为我已经设法解决了这个问题。 我应该将这段代码添加到问题中(这是调用控制器来加载带有表单的模态):

public ActionResult GetTeam(int? id)
{
    return PartialView("EditTeam", id.HasValue ? _teamLogic.GetById(id.Value) : new TeamModel());
}

问题在于传入的参数是'id'。当改为'teamId'时它起作用了。我猜测MVC试图变得聪明并将其识别为模态的关键值,因此在调用new时,将其设置为空白。