【问题标题】:asp.net mvc 3 unobstrusive validation issue [duplicate]asp.net mvc 3不显眼的验证问题[重复]
【发布时间】:2013-06-03 10:52:28
【问题描述】:

我正在尝试制作一些类别实体添加表单,在客户端进行不显眼的验证。

这是我的实体:

public class Category
{
    public Int32 Id { get; set; }

    [DisplayName("Alias")]
    [Required(AllowEmptyStrings = false, ErrorMessage = "Have to complete")]
    [StringLength(100, ErrorMessage = "asdasdasd", MinimumLength = 3)]
    public String Name { get; set; }

    [DisplayName("Name1")]
    [Required(AllowEmptyStrings = false, ErrorMessage = "Have to complete")]
    public String DisplayName { get; set; }

    [DisplayName("Name2")]
    [Required(AllowEmptyStrings = false, ErrorMessage = "Have to complete")]
    public String DisplayNameTZK { get; set; }

    [DisplayName("Url")]
    [DataType(DataType.Url, ErrorMessage = "Url")]
    public String Uri { get; set; }

    public Guid AddingGuid { get; set; }

    public Boolean IsActive { get; set; }

   ...
}

这是我的看法:

@model HSDT.Models.Entities.Category

@{
    Html.EnableUnobtrusiveJavaScript();
    Html.EnableClientValidation();
}

@using (Html.BeginForm("", "", null, FormMethod.Post, new { id = "addCategoryForm", name = "addCategoryForm" }))
{
    @Html.AntiForgeryToken()
    @Html.ValidationSummary(false)

    <fieldset>
        <legend>Category</legend>

        <div class="editor-label">
            @Html.LabelFor(model => model.Name)
        </div>
        <div class="editor-field">
            @Html.EditorFor(model => model.Name)
            @Html.ValidationMessageFor(model => model.Name)
        </div>

        <div class="editor-label">
            @Html.LabelFor(model => model.DisplayName)
        </div>
        <div class="editor-field">
            @Html.EditorFor(model => model.DisplayName)
            @Html.ValidationMessageFor(model => model.DisplayName)
        </div>

        <div class="editor-label">
            @Html.LabelFor(model => model.DisplayNameTZK)
        </div>
        <div class="editor-field">
            @Html.EditorFor(model => model.DisplayNameTZK)
            @Html.ValidationMessageFor(model => model.DisplayNameTZK)
        </div>

        <div class="editor-label">
            @Html.LabelFor(model => model.Uri)
        </div>
        <div class="editor-field">
            @Html.EditorFor(model => model.Uri)
            @Html.ValidationMessageFor(model => model.Uri)
        </div>

        <div class="editor-label">
            @Html.LabelFor(model => model.AddingGuid)
        </div>
        <div class="editor-field">
            @Html.EditorFor(model => model.AddingGuid)
            @Html.ValidationMessageFor(model => model.AddingGuid)
        </div>

        <div class="editor-label">
            @Html.LabelFor(model => model.IsActive)
        </div>
        <div class="editor-field">
            @Html.EditorFor(model => model.IsActive)
            @Html.ValidationMessageFor(model => model.IsActive)
        </div>

        <p>
            <input type="submit" value="Create" />
        </p>
    </fieldset>
}

现在我将所有输入留空并尝试验证此表单以获取模型中显示的错误:

$("#addCategoryForm").validate().valid()

但是我得到了true(并且没有错误),但应该是false,因为在数据注释中我为几个字段添加了[Required]属性。我做错了什么?

感谢您的提前。

EDIT-1

这是我的配置:

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

这里是参考:

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

【问题讨论】:

  • 你为什么打电话给$("#addCategoryForm").validate().valid()?表单的提交应该验证输入的。还是问题中缺少一些js?
  • 我在 google chrome 中打开我的网站并将其写入控制台
  • 我觉得你的js错了试试$("#addCategoryForm").valid()
  • 看来你不能直接从 js 触发这个。见这里stackoverflow.com/questions/6301492/…。您需要实际提交表单
  • 对不起,那句话是错误的,这就是你在吃午饭前回复的结果……你可以,而 .valid() 就是这样做的方法。可能是控制台没有正确触发它。

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


【解决方案1】:

您是否以正确的顺序添加了 js 文件?

<script src="/Scripts/jquery-1.7.2.min.js" type="text/javascript"></script>
<script src="/Scripts/jquery.validate.min.js" type="text/javascript"></script>
<script src="/Scripts/jquery.unobtrusive-ajax.min.js" type="text/javascript"></script>

在 webconfig 中:

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

【讨论】:

  • 所有参考资料都已添加!
  • 回发操作中是否有类似“if(ModelState.IsValid)”的内容以便执行验证?
  • 我没有向服务器端发出任何请求。问题出在客户端验证中。
  • 如果你使用:@using (Ajax.BeginForm(new AjaxOptions { UpdateTargetId = "div-outside-form-id" }))
  • 我不想使用服务器端验证!我希望我的数据在客户端使用无障碍验证进行验证
【解决方案2】:

从您的视图中删除以下内容

$("#addCategoryForm").validate().valid()
Html.EnableUnobtrusiveJavaScript();
Html.EnableClientValidation();
@Html.ValidationSummary(false)

将以下 js 文件添加到您的视图中:

<script type="text/javascript" src="../../Scripts/jquery-1.8.2.min.js"></script>
<script type="text/javascript" src="../../Scripts/jquery.validate.min.js"></script>
<script type="text/javascript" src="../../Scripts/jquery.validate.unobtrusive.min.js"></script>

使用

<button type="submit">Create</button> 

代替

&lt;input type="submit" value="Create" /&gt;

按照@Lasse 的描述添加 Web-config 部分。 这将导致模型验证抛出验证错误(如果有)。

【讨论】:

  • 我想通过 Ajax 提交表单,而不是简单的表单提交!
  • 我想在任何地方调用jquery验证!
  • @Maris 你能更具体地谈谈你与 ajax 相关的问题吗?
  • 我有我想要的表格:1)通过 Jquery 验证数据 2)如果有一些错误 -> 显示错误 3)如果没有错误 -> 使用 $ 提交数据。邮政(...)。 - 将刷新整个页面,但我不想这样做!
猜你喜欢
  • 2011-06-28
  • 2011-07-09
  • 1970-01-01
  • 1970-01-01
  • 2011-12-22
  • 2011-09-20
  • 2011-09-17
  • 1970-01-01
  • 2011-06-22
相关资源
最近更新 更多