我有一些mvc3客户端验证,表现得很奇怪。
在我的控制器中我有
ViewBag.Id = item.Id;
ViewBag.reqAction = item.RequestedAction;
return View("Decline");
在我看来,我有
@Html.HiddenFor(model => model.Id, new { value = ViewBag.Id })
@Html.HiddenFor(model => model.RequestedAction, new { value = ViewBag.reqAction })
无论我做什么,RequestedAction的值都会显示为空白。我甚至试过......
@Html.HiddenFor(model => model.RequestedAction, new { value = "test" })
Id的值完美运行,验证适用于其他字段(我已省略)。我已经跟踪了代码,ViewBag.reqAction
具有我认为它应具有的确切值。我的ViewModel看起来像这样......
[Required]
public int Id { get; set; }
[Required]
public string RequestedAction { get; set; }
[Required]
[DataType(DataType.MultilineText)]
public string Explanation { get; set; }
为什么我无法获取RequestedAction隐藏输入的value属性中的任何数据?
答案 0 :(得分:4)
我相信MVC正试图从模型本身获取价值。当它合并htmlAttributes时,它会覆盖您指定的值。 Id工作的原因是MVC可能从其他位置获得值(可能是ViewBag)。尝试直接在模型上设置值(或将其放在模型状态中)
答案 1 :(得分:1)
据我了解,客户端验证不会检查隐藏字段的值(我遇到了同样的问题)。
我的解决方法是简单地使用输入字段(使用HTML.EditorFor),因为我知道在客户端/服务器端都可以正常工作。然后,我将所有应该隐藏在div中的EditorFor包含在一个“HiddenValidator”类中,并使用jQuery在document.ready上隐藏该类。
也许不是最漂亮的解决方案,但它完成了工作。