【问题标题】:ASP MVC radio button validationASP MVC 单选按钮验证
【发布时间】:2012-08-28 18:35:28
【问题描述】:

我是 mvc 新手,有几个关于 asp mvc 3 验证的问题,希望得到有关任何问题的帮助:

首先我有一个模型类,它需要一些字段,如下所示:

[Required(ErrorMessage = "Required field")]
public UInt16 SomeField { get; set; }

它正在工作,但错误消息以黑色字体显示(我希望它是红色的),并且我认为验证是在服务器端而不是客户端上进行的,我一直在阅读一些关于如何使 javascript 验证工作,但它显然不起作用:

Web.config

<appSettings>
  <add key="ClientValidationEneabled" value="true" />
  <add key="UnobtrusiveJavaScriptEnabled" value="true" />
</appSettings>

索引.cshtml

<script src="../../Scripts/MicrosoftAjax.js" type="text/javascript"></script>
<script src="../../Scripts/MicrosoftMvcValidation.js" type="text/javascript"></script>
@{ Html.EnableClientValidation(); }

这是我的第二个问题,让它在客户端工作。

对于某些具有Required 验证器并具有一组与它们相关联的单选按钮的字段,如下所示

型号

[Required(ErrorMessage = "Required field")]
public UInt16 SomeField { get; set; }

查看

@Html.RadioButtonFor(model => model.SomeField, 1) Label
@Html.RadioButtonFor(model => model.SomeField, 2) Label
@Html.ValidationMessageFor(model => model.SomeField)

当您错过单击单选按钮时,验证消息没有显示(即使是黑色字体),如何在没有按下按钮时显示它。

ASP MVC 3 剃须刀引擎

【问题讨论】:

    标签: asp.net-mvc validation


    【解决方案1】:

    Microsoft*.js 脚本在 ASP.NET MVC 3 中已弃用,不应再使用。你可以完全摆脱它们。如果您要升级较旧的应用程序,它们仅用于向后兼容。 Html.EnableClientValidation(); 助手也是如此。它们被jquery.validate 插件和不显眼的验证脚本所取代。

    由于您在 web.config 中启用了不显眼的验证,因此要在 MVC 3 应用程序中启用客户端验证,您只需包含 jquery.validate.jsjquery.validate.unobtrusive.js 脚本,以及 @987654326 的版本@ 你当然在使用,因为这两个脚本都依赖于它。

    <script type="text/javascript" src="@Url.Content("~/scripts/jquery-1.5.1.js")"></script>
    <script type="text/javascript" src="@Url.Content("~/scripts/jquery.validate.js")"></script>
    <script type="text/javascript" src="@Url.Content("~/scripts/jquery.validate.unobtrusive.js")"></script>
    

    关于您的代码的另一个说明是您应用于不可空类型 (ushort) 的 [Required] 属性。这是没有意义的,因为不可为空的类型,就其本质而言,总是有价值的。 Required 属性只能用于可为空的类型,例如:

    [Required(ErrorMessage = "Required field")]
    public ushort? SomeField { get; set; }
    

    就验证消息的颜色而言,客户端和服务器端验证都使用相同的 HTML 结构。因此,设计这些消息的外观和感觉确实是 CSS 的问题。

    【讨论】:

    • 常规 jquery 库是否需要放在前面,或者它是否已经包含在其中任何一个中。
    • 是的,在他们之前,因为他们都依赖它。
    • 我认为 MicrosoftAjax 会处理错误消息的相应 css,这对我来说意味着更多的工作。 +1
    • +1 用于提及不可为空类型的必需属性。在查看其他人的代码时,当他们问“为什么当我不选择任何东西时这不验证?”时,我发现了很多次。
    • 那么当属性仍然具有默认值时,如何将其标记为无效。 loki 显然不认为 0 有效。你告诉他们为什么它不起作用,但现在如何让它起作用。
    【解决方案2】:

    像这样声明模型.. 使用 Nullable

    [Required(ErrorMessage = "Required field")]
    public  Nullable<UInt16> SomeField { get; set; }
    

    所以当你提交表单而不检查任何单选按钮空值是在这写这段代码之后

    if (!ModelState.IsValid)
    {
        return View();
    }
    

    如果您没有选择任何单选按钮,则它会返回您的视图并显示验证消息...

    【讨论】:

      猜你喜欢
      • 2016-12-07
      • 2018-01-23
      • 2015-09-01
      • 2012-12-01
      • 1970-01-01
      • 1970-01-01
      • 2016-02-15
      • 2016-03-01
      相关资源
      最近更新 更多