0

我正在使用 Linq to 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;
 }
4

1 回答 1

0

好吧,您实际上并没有“提交”表单,您只是在制作表单内容的 ajax 帖子,因此任何与表单的“提交”事件挂钩的验证逻辑都不会触发。

除非表单有效,否则您可能需要添加一个守卫来防止 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 数据注释的问题。

于 2013-09-18T06:06:59.153 回答