【发布时间】: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