我正在使用Linq来进行SQL数据注释验证。如果某些字段无效,我会收到验证消息。但是,如果我点击保存,表单仍然会提交(使用无效值)。
查看:
<script src="~/Scripts/jquery-1.8.2.min.js"></script>
<script src="~/Scripts/jquery.validate.min.js"></script>
<script src="~/Scripts/jquery.validate.unobtrusive.min.js"></script>
@section Scripts {
@Scripts.Render("~/bundles/jqueryval")
}
<div id="Content">
@using (Html.BeginForm()) {
....
....
<input type="button" id="btnSave" name="submit" value="Save" />
$("#btnSave").on("click", saveRecord);
function saveRecord() {
//document.forms[0].submit();
$.ajax(
{ type: 'Post' ,
url: '@Url.Action("Save", "Orders")',
data: {
OrderID: '@Model.OrderID',
ShipName: $('.Name input').val(),
ShipAddress: '@Model.ShipAddress',
RequiredDate: '@Model.RequiredDate',
ShipPostalCode: '@Model.ShipPostalCode'
},
dataType: "html",
success: function (data){
//alert ('saved');
}
})
return false;
}
答案 0 :(得分:0)
嗯,你实际上并没有'提交'表单,你只是在表单内容的ajax帖子,所以任何挂在表单'submit'事件中的验证逻辑都不会触发。
除非表单有效,否则您可能需要添加一个防护来防止ajax发布,例如:
var myForm = $('form');
myForm.validate();
if(myForm.valid()) { //Assuming that valid() is the method provided by your client side validation library.
$.ajax(...)
}
当服务器收到数据时(在将数据插入数据库之前),您还应该再次验证数据,以阻止人们故意绕过您网页上的验证。
此外,这个问题可能不应该用linq-to-sql标记,因为它似乎纯粹是jQuery验证的问题。 ASP.NET MVC数据注释。