MVC 3验证隐藏输入的htmlAttributes

时间:2011-04-05 03:54:44

标签: asp.net-mvc asp.net-mvc-3 c#-4.0 viewmodel

我有一些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属性中的任何数据?

2 个答案:

答案 0 :(得分:4)

我相信MVC正试图从模型本身获取价值。当它合并htmlAttributes时,它会覆盖您指定的值。 Id工作的原因是MVC可能从其他位置获得值(可能是ViewBag)。尝试直接在模型上设置值(或将其放在模型状态中)

答案 1 :(得分:1)

据我了解,客户端验证不会检查隐藏字段的值(我遇到了同样的问题)。

我的解决方法是简单地使用输入字段(使用HTML.EditorFor),因为我知道在客户端/服务器端都可以正常工作。然后,我将所有应该隐藏在div中的EditorFor包含在一个“HiddenValidator”类中,并使用jQuery在document.ready上隐藏该类。

也许不是最漂亮的解决方案,但它完成了工作。