【问题标题】:Why doesn't ASP.NET MVC 3 enable client-side validation in this case?为什么在这种情况下 ASP.NET MVC 3 不启用客户端验证?
【发布时间】:2011-11-08 08:26:36
【问题描述】:

我正在尝试按照Brad Wilson's recipe 在我的 ASP.NET MVC 3 项目中集成不显眼的客户端验证。但是,它不会在渲染视图中启用。例如,我的<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 属性:(

【问题讨论】:

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


    【解决方案1】:

    您忘记使用form。用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-* 验证属性

    【讨论】:

    • 看来我必须专门使用Html.BeginForm(),只是自己输入一个
      标签是没有效果的。谢谢!
    • 如果你使用手动表单标签,你也必须手动初始化FormContext。 @{ ViewContext.FormContext = new FormContext(); }
    猜你喜欢
    • 2010-10-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-14
    • 2014-07-21
    相关资源
    最近更新 更多