ajax形式和验证的帖子

时间:2011-03-03 10:30:54

标签: asp.net asp.net-mvc-3

ajax post是否支持提交表单时的常规验证?

@using(Html.BeginForm()){
@Hml.ValidationSummary()

<input type="submit" value ="Save">
}

相同
    @using(Html.BeginForm(new {id=FormTest})){
     @Hml.ValidationSummary()
<input type="button" value= Save>
    }

<script type="javascript">
$("#Save").click(function(){
$("#FormTest").submit();

});
</script>

1 个答案:

答案 0 :(得分:1)

这里有很多错误的事情,我真的不知道从哪里开始。

  1. 您的Html.BeginForm定义错误:您将routeValueshtmlAttributes混淆。请参阅下面的解决方案

  2. 您的按钮没有ID,因此您的javascript选择器很可能会失败

  3. 所有这些努力都不是必需的,因为一个简单的<input type="submit">按钮开箱即用。

  4. 现在假设你不知何故你是javascript的粉丝,你想写它(我不知道你为什么要写代码但是无论如何)。首先修复表单定义:

    @using(Html.BeginForm("someAction", "someController", FormMethod.Post, new { id = "FormTest" }))    
    {
        @Html.ValidationSummary()
        @Html.TextBoxFor(x => x.Foo)
    
        <input type="button" value="Save" id="Save" />
    }
    

    然后你可以这样做:

    $('#Save').click(function() {
        var form = $('#FormTest');
        if (form.valid()) {
            form.submit();
        }
    });
    

    显然,您必须确保在您的页面上正确包含客户端脚本:

    <script src="@Url.Content("~/Scripts/jquery.validate.js")" type="text/javascript"></script>
    <script src="@Url.Content("~/Scripts/jquery.validate.unobtrusive.js")" type="text/javascript"></script>
    

    当然,我建议您使用提交按钮提交表单的真正解决方案是:

    @using(Html.BeginForm("someAction", "someController", FormMethod.Post, new { id = "FormTest" }))    
    {
        @Html.ValidationSummary()
        @Html.TextBoxFor(x => x.Foo)
    
        <input type="submit" value="Save" id="Save" />
    }
    

    现在你不需要任何javascript(显然你仍然需要两个脚本包含来进行不引人注意的验证)。