【问题标题】:MVC3/Razor Client Validation Not firingMVC3/Razor 客户端验证未触发
【发布时间】:2011-06-23 02:35:55
【问题描述】:

我正在尝试使用数据注释在 MVC3 中进行客户端验证。我查看了类似的帖子,包括这个MVC3 Client side validation not working 来寻找答案。

我正在使用 EF 数据模型。我为我的验证创建了一个像这样的部分类。

[MetadataType(typeof(Post_Validation))]
public partial class Post
{

}

public class Post_Validation
{
    [Required(ErrorMessage = "Title is required")]
    [StringLength(5, ErrorMessage = "Title may not be longer than 5 characters")]
    public string Title { get; set; }

    [Required(ErrorMessage = "Text is required")]
    [DataType(DataType.MultilineText)]
    public string Text { get; set; }

    [Required(ErrorMessage = "Publish Date is required")]
    [DataType(DataType.DateTime)]
    public DateTime PublishDate { get; set; }
}

我的 cshtml 页面包括以下内容。

<h2>Create</h2>
<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>

@using (Html.BeginForm()) {
    @Html.ValidationSummary(true)
    <fieldset>
        <legend>Post</legend>

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

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

网页配置:

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

布局:

<head>
<title>@ViewBag.Title</title>
<link href="@Url.Content("~/Content/Site.css")" rel="stylesheet" type="text/css" />
<script src="@Url.Content("~/Scripts/jquery-1.4.4.min.js")" type="text/javascript"></script>

因此,多行文本注释起作用并创建了一个文本区域。但是没有一个验证在客户端工作。我不知道我可能会错过什么。有任何想法吗??如果需要,我可以发布更多信息。谢谢!

【问题讨论】:

  • 嗨,这可能不再活跃,但我只想问你如何解决这个问题?我在这里面临着完全相同的问题,但我无法获得文本字段的验证..任何想法?谢谢...

标签: validation asp.net-mvc-3 client razor


【解决方案1】:

1.) 尝试将以下内容添加到您正在验证的视图中

HtmlHelper.ClientValidationEnabled = true;
HtmlHelper.UnobtrusiveJavaScriptEnabled = true;

我觉得没有必要修改Web.config,所以你可以删除

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

祝你好运!此外,尝试输入一个已知的错误值以查看是否触发了客户端验证,所需的注释似乎不足以显示空白输入的消息。

2.) 将以下脚本放在您的视图中,它应该可以工作。

@section Scripts {
    @Scripts.Render("~/bundles/jqueryval")
}

【讨论】:

  • 这确实有效,但我的问题是我在 Views\web.config 中有 appsettings,而不是 root\web.config。我不确定它们是如何混淆的,因为默认项目将它们置于根配置中,但它让我陷入了循环。
【解决方案2】:

尝试使用 public object 声明:

public class Post_Validation
{
    [Required(ErrorMessage = "Title is required")]
    [StringLength(5, ErrorMessage = "Title may not be longer than 5 characters")]
    public object Title { get; set; }

    [Required(ErrorMessage = "Text is required")]
    [DataType(DataType.MultilineText)]
    public object Text { get; set; }

    [Required(ErrorMessage = "Publish Date is required")]
    [DataType(DataType.DateTime)]
    public object PublishDate { get; set; }
}

【讨论】:

    猜你喜欢
    • 2011-05-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-23
    • 2013-11-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多