Home > Web Front-end > JS Tutorial > body text

Ajax form validation after MVC meets bootstrap

亚连
Release: 2018-05-23 11:19:56
Original
2339 people have browsed it

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>
Copy after login

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;
    }
Copy after login

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>
Copy after login

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: &#39;新建用户&#39;,//.....
      });
      $("#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();
      });
    }
Copy after login

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);
Copy after login

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!

Related labels:
source:php.cn
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
About us Disclaimer Sitemap
php.cn:Public welfare online PHP training,Help PHP learners grow quickly!