Javascript ASP.NET MVC4赢得';如果第一次提交时有错误,则不能提交客户端验证

Javascript ASP.NET MVC4赢得';如果第一次提交时有错误,则不能提交客户端验证,javascript,asp.net-mvc,razor,asp.net-mvc-4,Javascript,Asp.net Mvc,Razor,Asp.net Mvc 4,我有一个简单的设置,但不明白为什么这不工作。以下是我的设置: MVC4 Html.EnableUnobtrusiveJavaScript()和 Html.EnableClientValidation()已启用 jQuery 1.6.2, jquery.validate.min.js和jquery.validate.unobtrusive.min.js 参考 没有绑定到表单或按钮提交的事件 问题是,它似乎在客户端工作,在客户端我可以提交一个表单,并显示相应的验证错误。然而,当我正确地填写表单并

我有一个简单的设置,但不明白为什么这不工作。以下是我的设置:

  • MVC4
  • Html.EnableUnobtrusiveJavaScript()和 Html.EnableClientValidation()已启用
  • jQuery 1.6.2, jquery.validate.min.js和jquery.validate.unobtrusive.min.js 参考
  • 没有绑定到表单或按钮提交的事件
问题是,它似乎在客户端工作,在客户端我可以提交一个表单,并显示相应的验证错误。然而,当我正确地填写表单并点击submit时,它什么也不做,我之前的最后一条错误消息仍然显示出来。如果我返回并清除字段,验证似乎仍在工作(验证摘要已适当更新)。如果我第一次提交时正确输入了所有字段,那么它就可以正常工作。只有当我第一次出错时,它才能再次提交

该型号仅在firstname、lastname和email上具有[Required]。没有其他属性。此外,FormFieldFor只是EditorFor()的包装器

代码如下。有什么想法吗?谢谢

@model AscendOne.CareOne.Mvc.Models.ResourceGuideUserModel

@*Form*@
<form id="guide-download-submit" method="get" action="/leads/" target="_blank">

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


    @Html.ValidationSummary()

    @if (Model.CampaignID != null)
    {<input type="hidden" name="CampaignID" value="@Model.CampaignID" />}
    @if (!String.IsNullOrWhiteSpace(Model.PDFUrl))
    {<input type="hidden" name="RedirectUrl" value="@Model.PDFUrl" />}

    <fieldset>
        @Html.FormFieldFor(m => m.FirstName)
        @Html.FormFieldFor(m => m.LastName)
        @Html.FormFieldFor(m => m.Email)
    </fieldset>

    <button type="submit">Download The Guide</button>

</form>




public class ResourceGuideUserModel
    {
        public string CampaignID { get; set; }
        public string PDFUrl { get; set; }

        [Required]
        [DisplayName("First Name:*")]
        public string FirstName { get; set; }

        [Required]
        [DisplayName("Last Name:*")]
        public string LastName { get; set; }

        [Required]
        [DisplayName("Email Address:*")]
        public string Email { get; set; }
    }
@model AscendOne.CareOne.Mvc.Models.ResourceGuideUserModel
@*形式*@
@{
Html.EnableUnobtrusiveJavaScript();
Html.EnableClientValidation();
}
@Html.ValidationSummary()
@如果(Model.campaid!=null)
{}
@如果(!String.IsNullOrWhiteSpace(Model.PDFUrl))
{}
@Html.FormFieldFor(m=>m.FirstName)
@Html.FormFieldFor(m=>m.LastName)
@Html.FormFieldFor(m=>m.Email)
下载指南
公共类ResourceGuideUserModel
{
公共字符串活动ID{get;set;}
公共字符串PDFUrl{get;set;}
[必需]
[DisplayName(“名字:”)]
公共字符串名{get;set;}
[必需]
[显示名称(“姓氏:”)]
公共字符串LastName{get;set;}
[必需]
[显示名称(“电子邮件地址:”)]
公共字符串电子邮件{get;set;}
}

嗯,原来是我的错。谢谢你的回复。似乎在第一次尝试后,另一个隐藏得很深的脚本杀死了我的表单提交。删除此选项解决了问题。再次感谢。

无论填写哪个字段还是留空,您都会得到完全相同的结果吗?我添加了模型。无论我按什么顺序填写,结果都是一样的。它仍然显示我在正确输入所有字段之前收到的最后一条验证消息。当我提交时,它好像只是返回false。表单属性操作和目标看起来可疑。它们都是正确的/必要的吗?@Nick-用户应该提交表单,然后将它们转换为PDF格式。它在一个新窗口中打开,/leads/controller是一个GET请求。为什么要使用手动创建的表单元素?为什么不使用Begin?你的行动方法是什么样子的?您是否使用了类似Fiddler的Http记录器来查看请求是否提交到服务器?