0

我有一个 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());
}
4

3 回答 3

0

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

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

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

于 2013-07-09T12:15:16.283 回答
0

为什么需要第二个参数?

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

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

@Html.HiddenFor(m => m.Id)
于 2013-07-09T11:04:03.953 回答
0

你有没有尝试过:

@Html.HiddenFor(m => m.Id, new { id = "teamId", value=Model.Id })
于 2013-07-09T11:01:53.797 回答