我有一个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());
}
答案 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时,将其设置为空白。