7

我是 mvc 的新手,并且有几个关于 asp mvc 3 验证的问题,关于这些问题的帮助将不胜感激:

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

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

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

网页配置

<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 剃刀引擎

4

2 回答 2

16

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

并且由于您在 web.config 中启用了不显眼的验证,因此为了在 MVC 3 应用程序中启用客户端验证,您需要包含jquery.validate.jsjquery.validate.unobtrusive.js脚本,jquery当然还有您正在使用的版本,因为这两个脚本都依赖于在上面。

<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>

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

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

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

于 2012-08-28T18:38:21.773 回答
1

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

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

因此,当您提交表单而不检查任何单选按钮时,在编写此代码之后会出现空值

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

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

于 2016-02-06T07:09:47.937 回答