【问题标题】:MVC 3 Validation htmlAttributes on hidden input隐藏输入上的 MVC 3 验证 htmlAttributes
【发布时间】:2011-07-29 15:41:33
【问题描述】:

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

【问题讨论】:

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


    【解决方案1】:

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

    【讨论】:

    • 谢谢。这太疯狂了!
    • 已经通过 JavaScript 设置了一个值。确实令人抓狂。
    【解决方案2】:

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

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

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

    【讨论】:

    • “HiddenValidator”选项对我不起作用。一旦我隐藏了那个类,它就停止了客户端验证。
    猜你喜欢
    • 1970-01-01
    • 2013-12-25
    • 2012-07-07
    • 1970-01-01
    • 2023-03-21
    • 2013-02-09
    • 2021-03-23
    • 1970-01-01
    • 2013-02-25
    相关资源
    最近更新 更多