·您现在的位置: 云翼网络 >> 文章中心 >> 网站建设 >> 网站建设开发 >> ASP.NET网站开发 >> 通过后台验证后提交表单,阻止表单默认提交

通过后台验证后提交表单,阻止表单默认提交

作者:佚名      ASP.NET网站开发编辑:admin      更新时间:2022-07-23

通过后台验证后提交表单,阻止表单默认提交

Todo:

有一个修改页面,其中有一个DepartmentName标签不允许在数据库中同名!当提交表单时,就从数据库中查询出是否有该名字的数据.如果有则返回false,否则返回true.然后前台根据返回的数据再来判断是否要提交!

效果图:

然而,在真正要写代码的时候发现了两个非常严重的问题!

待解决:

1.如何阻止表单提交(主要问题)

2.无论如何要修改的这条数据在数据库中都至少存在一条(不出意外的话数据库中应该只会存在一条相同DepartmentName的数据,所以返回的总是false)

解决方法:

前台的Html代码:

 1 @using (Html.BeginForm()) 2 { 3     @Html.AntiForgeryToken() 4  5     <div class="form-horizontal"> 6         <h4>@Html.DisplayFor(model => model.DepartmentName)===></h4> 7         <hr /> 8         @Html.ValidationSummary(true, "", new { @class = "text-danger" }) 9         @Html.HiddenFor(model => model.Id)10         <div class="form-group">11             @Html.LabelFor(model => model.DepartmentName, htmlAttributes: new { @class = "control-label col-md-2" })12             <div class="col-md-10">13                 @Html.EditorFor(model => model.DepartmentName, new { htmlAttributes = new { @class = "form-control" } })14                 @Html.ValidationMessageFor(model => model.DepartmentName, "", new { @class = "text-danger" })15             </div>16         </div>17         <div class="form-group">18             @Html.LabelFor(model => model.DepartmentDescription, htmlAttributes: new { @class = "control-label col-md-2" })19             <div class="col-md-10">20                 @Html.EditorFor(model => model.DepartmentDescription, new { htmlAttributes = new { @class = "form-control" } })21                 @Html.ValidationMessageFor(model => model.DepartmentDescription, "", new { @class = "text-danger" })22             </div>23         </div>24         <div class="form-group">25             <div class="col-md-offset-2 col-md-10">26                 <input type="submit" value="保存" class="btn btn-success" />27             </div>28         </div>29     </div>30 }
View Code

前台的javascript代码:

 1 <script type="text/Javascript"> 2         $('form').submit(function () {//把要提交的表单用jquery.submit()方法提交 3             var form = $(this);//获取当前要提交的表单 4             var departmentName = $('#DepartmentName').val();//获取要提交的DepartmentName 5             //解决第二个问题:因为是asp.mvc,把用户修改后的DepartmentName值与页面的@Model.DepartmentName值比较             6             if (departmentName !== '@Model.DepartmentName') {//值已改变,去后台验证是否有同名 7                 $.post('@Url.Action("CheckDepartmentName")', {//Ajax异步 8                     departmentName: departmentName 9                 }, function(data) {10                     if (data) {//没有相同名11                         form.unbind('submit');//解除在这个form表单上绑定的各种东西(很重要,不然就一直循环个不停)12                         form.submit();//成功提交13                     } else {14                         showDialog("已有相同院系");//已有相同名:弹出提示框15                     }16                 });17             } else {//DepartmentName值没有改变18                 form.unbind('submit');//解除在这个form表单上绑定的各种东西(很重要,不然就一直循环个不停)19                 form.submit();//成功提交20             }21             return false;//返回false(非常重要)22         });23         //这是封装的提示框方法:bootstrap-dialog(喜欢的可以耍耍)24         function showDialog (dialogMessage, dialogType) {25             var dialog = BootstrapDialog.show({    26                 title: '提示',27                 message: dialogMessage28             });            29             if (dialogType==='success') {30                 dialog.setType(BootstrapDialog.TYPE_SUCCESS);31             } else {32                 dialog.setType(BootstrapDialog.TYPE_DANGER);33             }34             var time = setTimeout(function () {35                 dialog.close();36                 clearTimeout(time);37             }, 3000);38         };39     </script>

后台验证代码:

public JsonResult CheckDepartmentName(string departmentName)        {            var query = db.Departments.Count(d => d.DepartmentName == departmentName);            return Json(query < 1, JsonRequestBehavior.AllowGet);        }

最终效果: