asp.net-mvc - 为什么 ASP.NET MVC 3 在这种情况下不启用客户端验证?

标签 asp.net-mvc asp.net-mvc-3 unobtrusive-javascript unobtrusive-validation

我正在尝试根据 Brad Wilson's recipe 在我的 ASP.NET MVC 3 项目中集成不显眼的客户端验证.但是,它不会在渲染 View 中启用。比如我的<input>元素(即编辑器字段)不会收到 data-val规定的属性。

我已完成以下操作以启用不显眼的客户端验证:

Web.config :

<configuration>
  <appSettings>
    <add key="ClientValidationEnabled" value="true" />
    <add key="UnobtrusiveJavaScriptEnabled" value="true" />
  </appSettings>
</configuration>

Options.cs :

public class Options
{
    // Annotate with validation rules, in order to generate client-side validation code 
    [Required, StringLength(60)]
    public string Bugs = "";
}

_Layout.cshtml :

<head>
  <script src="@Url.Content("~/Scripts/jquery-1.6.2.min.js")" type="text/javascript"></script>
  <script src="@Url.Content("~/Scripts/jquery.validate.min.js")" type="text/javascript"></script>
  <script src="@Url.Content("~/Scripts/jquery.validate.unobtrusive.min.js")" type="text/javascript"></script>
</head>

Options.cshtml :

@model MyProject.Models.Options

<div id="options-form">
  @Html.ValidationSummary(true)
  <fieldset>
    <legend>Options</legend>
    <div class="editor-label">
      @Html.LabelFor(model => model.Bugs)
    </div>
    <div class="editor-field">
      @Html.EditorFor(model => model.Bugs)
      @Html.ValidationMessageFor(model => model.Bugs)
    </div>
  </fieldset>
</div>

此 HTML 是为编辑器字段生成的:

<div class="editor-label">
  <label for="Bugs">Bugs</label>
</div>
<div class="editor-field">
  <input class="text-box single-line" id="Bugs" name="Bugs" type="text" value="" />

如你所见,没有 data-val属性:(

最佳答案

您忘记使用表单。用 Html.BeginForm

围绕您的字段集
<div id="options-form">
@using (Html.BeginForm()) {
  @Html.ValidationSummary(true)
  <fieldset>
    <legend>Options</legend>
    <div class="editor-label">
      @Html.LabelFor(model => model.Bugs)
    </div>
    <div class="editor-field">
      @Html.EditorFor(model => model.Bugs)
      @Html.ValidationMessageFor(model => model.Bugs)
    </div>
  </fieldset>
}
</div>

这将初始化 FormContext 并且您的输入将接收 data-val-* 验证属性

关于asp.net-mvc - 为什么 ASP.NET MVC 3 在这种情况下不启用客户端验证?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7269880/

相关文章:

javascript - jQuery POST 中的 bool 值到 MVC5 Controller

asp.net - 在 MVC3 编辑器模板中获取验证属性

javascript - 动态创建的元素上的事件绑定(bind)?

c# - ASP.NET Identity 记住登录页面上的电子邮件地址

jquery - Asp.net Core,如何在 JQuery/Ajax 中将文件和模型发布到 Controller ?

asp.net-mvc - ASP.Net MVC 和 N 层

c# - HttpContext.Current.Request.Form 复选框

c# - MvcContrib TestHelper 在使用 AssertViewRendered 时给出一个奇怪的错误

javascript - 动态创建的元素上的事件绑定(bind)?

Javascript:模块模式与构造函数/原型(prototype)模式?