C# MVC4验证不起作用

C# MVC4验证不起作用,c#,jquery,asp.net,asp.net-mvc,asp.net-mvc-4,C#,Jquery,Asp.net,Asp.net Mvc,Asp.net Mvc 4,我有一个简单的1页应用程序发送电子邮件给用户。我有3个字段,分别是姓名、电子邮件和电话号码。代码似乎与输入按钮一起工作,启动验证并抛出正确的错误消息。但我更倾向于在UI中使用锚定标签(ActionLink)。当我单击锚定标记(使用jQuery)时,数据仍然会发布,但验证不会触发。我有没有遗漏什么或者有更好的方法 我已经用post作为参考 型号 public class Contact { [Required(ErrorMessage = "Name is required")]

我有一个简单的1页应用程序发送电子邮件给用户。我有3个字段,分别是姓名、电子邮件和电话号码。代码似乎与输入按钮一起工作,启动验证并抛出正确的错误消息。但我更倾向于在UI中使用锚定标签(ActionLink)。当我单击锚定标记(使用jQuery)时,数据仍然会发布,但验证不会触发。我有没有遗漏什么或者有更好的方法

我已经用post作为参考

型号

public class Contact
{
    [Required(ErrorMessage = "Name is required")]
    public string Name { get; set; }

    [Required(ErrorMessage = "Email is required")]
    public string Email { get; set; }

    [Required(ErrorMessage = "Phone is required")]
    public string PhoneNumber { get; set; }
}
查看

            <div>
                @Html.TextBoxFor(model => model.Name, new { @class = "form-control", placeholder="Name" })
                @Html.ValidationMessageFor(model=>model.Name)
            </div>
            <div>
                @Html.TextBoxFor(model => model.Email, new { @class = "form-control", placeholder="Email" })
                @Html.ValidationMessageFor(model=>model.Email)
            </div>
            <div>
                @Html.TextBoxFor(model => model.PhoneNumber, new { @class = "form-control", placeholder="Phone" })
                @Html.ValidationMessageFor(model=>model.PhoneNumber)
            </div>
            <div>
                <input type="submit" value="Give me Free Advice" />
                <div class="btn">
                    @Html.ActionLink("I want free advice", "designerhome")
                </div>
            </div>
  <script>
    $(function () {
        $('.btn').click(function (e) {

            $.post("/campaign/designerhome", { Name: $("#Name").val(), Email: $("#Email").val(), PhoneNumber: $("#Phone").val() }, function (result) {
                //do whatever with the response
                if (result.status == true) {
                    alert('Email submitted successfully');
               }
            });//end of post
        });//end of click
    });
</script>

只需将输入按钮的样式设置为具有以下CSS的链接:

input[type=submit]{
背景:无!重要;
边界:无;
填充:0!重要;
颜色:#069;
文字装饰:下划线;
光标:指针;
}

我会在您的
点击
处理程序中强制验证,因为jQuery似乎只对表单的自动提交(而不是您正在执行的手动
post()
进行验证):


当您向操作发出Ajax请求时,您的验证不会被反映,因为视图不会再次呈现。要保持不变,可以返回类似JSON的

return Json(new {Valid = validState,
                Errors = Get Errors FromModel State, 
            });
然后使用JavaScript重新填充

另一种方法是制作自定义帮助程序,它将对所需操作发出POST请求。相同的代码参考如下


最后,您可以创建一个HTML按钮并发出POST请求。

我们有一些原因说明验证不起作用

1。检查web配置中的应用设置

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

希望它能帮助您。

为避免请求被重定向以获取请求。在锚的onClick()方法中绑定e.preventDefault()。
return Json(new {Valid = validState,
                Errors = Get Errors FromModel State, 
            });
    <add key="ClientValidationEnabled" value="true" />
    <add key="UnobtrusiveJavaScriptEnabled" value="true" />
jquery.unobtrusive*.js
jquery.validate*.js