首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >为ajax帖子手动调用MVC 3客户端验证

为ajax帖子手动调用MVC 3客户端验证
EN

Stack Overflow用户
提问于 2011-02-26 23:39:06
回答 8查看 74.6K关注 0票数 61

我正在创建一个MVC3Web应用程序。我想在实体类上使用数据注释,然后在回发到服务器之前使用不显眼的客户端验证。在写一篇普通的文章时,这是很好的。如果任何字段无效,我将获得验证和验证摘要。但是,我想通过ajax和json来发布这些信息。如何才能“手动”首先在客户端验证表单,然后将ajax post返回到服务器。下面是我的代码的汇总版本。

代码语言:javascript
复制
  public class Customer
    {
        [Required(ErrorMessage = "The customer's first name is required.")]
        public string FirstName { get; set; }

        [Required(ErrorMessage = "The customer's last name is required.")]
        public string LastName { get; set; }
    }



    <% using (Html.BeginForm()) { %>

    <%: Html.LabelFor(model => model.FirstName, "First Name")%>
    <%: Html.TextBoxFor(model => model.FirstName, new { @class = "TextBox", id = "Customer.FirstName" })%>
    <%: Html.ValidationMessageFor(model => model.FirstName, "*")%>

    <%: Html.LabelFor(model => model.LastName, "Last Name")%>
    <%: Html.TextBoxFor(model => model.LastName, new { @class = "TextBox", id = "Customer.LastName" })%>
    <%: Html.ValidationMessageFor(model => model.LastName, "*")%>

    <div id="CustomerEditSave" class="Button CustomerEditButtons" style="margin-right:40px;">
       <a href="#">Save</a>
    </div>

    <%: Html.ValidationSummary(true) %>

    <% } %>

我试过这段代码,但它只验证名字,不显示验证摘要。

代码语言:javascript
复制
    $("#CustomerEditSave").click(function () {
        $(form).validate();
        //Ajax call here
    });
EN

回答 8

Stack Overflow用户

回答已采纳

发布于 2011-02-27 13:25:31

尝试:

代码语言:javascript
复制
//using the form as the jQuery selector (recommended)
$('form').submit(function(evt) {
    evt.preventDefault();
    var $form = $(this);
    if($form.valid()) {
        //Ajax call here
    }
});

//using the click event on the submit button
$('#buttonId').click(function(evt) {
    evt.preventDefault();
    var $form = $('form');
    if($form.valid()) {
        //Ajax call here
    }
});

这应该适用于jQuery、ajax和MSAjax调用。也可以尝试使用http://nuget.org/packages/TakeCommand.jshttps://github.com/webadvanced/takeCommand,它将自动为您处理此问题。

票数 97
EN

Stack Overflow用户

发布于 2011-02-27 19:52:33

几天来,我一直在研究MVC客户端验证:

不要使用使用.submit的.click:

代码语言:javascript
复制
$("#MyForm").on('submit',function () {

    if($("#MyForm").valid())
    {
        //Do ajax stuff
    }

    //Return false regardless of validation to stop form submitting
    //prior to ajax doing its thing
    return false;
});

我将对此添加一个更新,考虑取消事件而不是返回false (或两者都做):

代码语言:javascript
复制
$("#MyForm").on('submit',function (e) {

    if($("#MyForm").valid())
    {
        //Do ajax stuff
    }

    e.preventDefault();

    //Return false regardless of validation to stop form submitting
    //prior to ajax doing its thing
    return false;
});
票数 24
EN

Stack Overflow用户

发布于 2014-06-07 02:37:44

至少在我的例子(MVC5)中,还需要添加以下代码,否则.valid()将始终返回true:

代码语言:javascript
复制
$(function () {
$(document).ajaxComplete(function(event, request, settings){
    //re-parse the DOM after Ajax to enable client validation for any new form fields that have it enabled
    $.validator.unobtrusive.parse(document);
});

});

请参阅http://johnculviner.com/the-unobtrusive-libraries-client-validation-on-ajax-in-asp-net-mvc-3/

票数 10
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5127813

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档