This article mainly introduces in detail the ajax form verification after MVC meets bootstrap. It has certain reference value. Interested friends can refer to it.
After using bootstrap, he can do it himself. The style has-error, it will be more troublesome to use it. If you usually use jquery.validate, you can only use its own style, and it is more convenient to use model verification when there is a model. How to solve it?
Of course you can write a jquery plug-in specifically for this. I think it is quite troublesome. If you like to write plug-ins, do some research.
First Nuget gets a component of MVC EditorTemplates for Bootstrap 3. With it, there will be some templates, such as a relatively simple Text:
@model object <p class="form-group@(Html.ValidationErrorFor(m => m, " has-error"))"> @Html.LabelFor(m => m, new { @class = "control-label" }) <p class="controls"> @Html.TextBox( "", ViewData.TemplateInfo.FormattedModelValue, ViewBag.ClearTextField == true ? new { @class = "form-control clear-text-field input-block-level" } : new { @class = "form-control input-block-level" } ) @Html.ValidationMessageFor(m => m, null, new { @class = "help-block" }) </p> </p>
In this way, after using EditorFor It will directly output the html required by bootstrap, which is more convenient.
We see that there is already a has-error handler for verification failure. The second question comes. We need front-end verification. Ajax verification is also acceptable. What about custom verification?
So we continue to use the model verification that comes with MVC. There is a Validation class in the component we just obtained. We first add an extension method to it for non-strong types
public static MvcHtmlString ValidationError(this HtmlHelper htmlHelper, string field, string error) { if (HasError(htmlHelper, ModelMetadata.FromStringExpression(field, htmlHelper.ViewData), field)) return new MvcHtmlString(error); else return null; }
View. Can be added:
<p class="form-group@(Html.ValidationError("Department", " has-error"))"> <label class="control-label" for="DepartmentId">所在部门</label> <p class="controls"> <span id="deptname"> </span><a id="btnSelectDepartment">选择部门</a> <input class="form-control" data-val="true" data-val-required="部门是必需的。" id="DepartmentId" name="DepartmentId" type="hidden" value=""> @Html.ValidationMessage("Department", null, new { @class = "help-block" }) </p> </p>
Finally, handle ajax submission and postback processing in the script. I don’t know if it is more convenient to use MVC’s Ajax.BeginForm, but I personally feel that this thing is not very flexible, so I continue to use ajaxSubmit. And jquery.ajax:
//ready var $puserform = $("#puserform"); $puserform.dialog({ title: '新建用户',//..... }); $("#btnCreateUser").click(function () { var nodes = zTreeObjleft.getSelectedNodes(); if (nodes.length > 0) { CreateUserForm($puserform); } }) function CreateUserForm(form) { var $puserform = form; $.ajax({ url: "CreateUser", success: function (html) { CreateUserFormSuccessCallback(html, $puserform); } }); } function InitSelectDepartmentWhenCreateUser() { $("#btnSelectDepartment").departmentSelection({ onSelected: function (name, id) { $("#deptname").text(name); $("#DepartmentId").val(id); } }); } function CreateUserFormSuccessCallback(html, form) { var $puserform = form; $puserform.children().children().html(html); $("#puserform").dialog("open"); var $form = $puserform.find("form") InitSelectDepartmentWhenCreateUser(); $form.submit(function () { $form.ajaxSubmit(function (data) { if (data == "success") { $("#puserform").dialog("close"); $("#puserform").clearForm(); } else { CreateUserFormSuccessCallback(data, form); } }); event.preventDefault(); }); }
We can add custom verification to it in the background Action method:
if (!DepartmentId.HasValue) { ModelState.AddModelError("Department", "必须选择部门"); } if (ModelState.IsValid) { user.Id = Guid.NewGuid(); user.CreateTime = DateTime.Now; if (DepartmentId.HasValue) { var dept = new DeptUserRole(); dept.DepartmentId = DepartmentId.Value; dept.IsMain = true; dept.RoleId = RoleId.Value; user.DeptUserRoles.Add(dept); } db.Users.Add(user); await db.SaveChangesAsync(); return Content("success"); } return View(user);
Approximate effect:
The above is what I compiled for everyone. I hope it will be helpful to everyone in the future.
Related articles:
AJAX request queue implementation
Summary of several methods of using ajax to submit forms asynchronously
How to solve the problem of arrays in AJAX requests
The above is the detailed content of Ajax form validation after MVC meets bootstrap. For more information, please follow other related articles on the PHP Chinese website!