简体   繁体   English

MVC Ajax表单提交失败

[英]MVC Ajax form submission failed

I have a partial view which I called within another view. 我有一个局部视图,在另一个视图中调用了该局部视图。 The partial view contains a form that looks like this: 部分视图包含如下形式的表单:

 @model Solnet_HotelSuite.Models.UserModels
 @using (Html.BeginForm("registration", "User", FormMethod.Post, new {  id="UserReg"}))
  {
  @Html.ValidationSummary(true)
<fieldset>
    <legend>UserModels</legend>
<div id="submitResult">
    @ViewBag.res
</div>
    <div class="fields_container">
    <div class="fields_labels">
        @Html.LabelFor(model => model.user_name)
    </div>
    <div class="fields">
        @Html.EditorFor(model => model.user_name)
        @Html.ValidationMessageFor(model => model.user_name)
    </div>
    </div>
    <div class="fields_container">
    <div class="fields_labels">
        @Html.LabelFor(model => model.user_pass)
        </div>
    <div class="fields">
        @Html.EditorFor(model => model.user_pass)
        @Html.ValidationMessageFor(model => model.user_pass)
    </div>
    </div>
    <div class="fields_container">
    <div class="fields_labels">
        @Html.LabelFor(model => model.UserEmail)
    </div>
    <div class="fields">
        @Html.EditorFor(model => model.UserEmail)
        @Html.ValidationMessageFor(model => model.UserEmail)
    </div>
    </div>
    <div class="fields_container">
    <div class="fields_labels">
        @Html.LabelFor(model => model.RegDate)
    </div>
    <div class="fields">
        @Html.EditorFor(model => model.RegDate)
        @Html.ValidationMessageFor(model => model.RegDate)
    </div>
    </div>
    <div class="fields_container">
      <div class="fields_labels">
        @Html.LabelFor(model => model.status)
    </div>
    <div class="fields">
        @Html.EditorFor(model => model.status)
        @Html.ValidationMessageFor(model => model.status)
    </div>
    </div>
    <div class="fields_container">
      <div class="fields_labels">
        User Role
        </div>
    <div class="fields">
    @{
var md = new Solnet_HotelSuite.Models.DBEntity();
var umod = md.RolesModels.Select(r => r.Caption);

     @Html.DropDownList("userID", new SelectList(umod), new { @id = "userID" })
     @Html.ValidationMessageFor(model => model.Roles.Caption)
    }
        </div>
    </div>
    <p>
        <button value="Create" id="register_USER">Save</button>
    </p>
    </fieldset>
   }
   @Content.Script("jquery-1.6.2.js", Url)
   <script type="text/javascript" >
     $(function () {

      $('#register_USER').click(function () {
        var form = $('#UserReg');

       // alert(JSON.stringify(form.serialize()));

        $.ajax({
            type: "POST",
            url: form.attr('action'),
            data: JSON.stringify(form.serialize()),
            dataType: "json",
            contentType: "application/json",
            success: function (data) {
              alert(data.Message);
            },
            error: function (data) {
                console.log(data.Message);
                alert(data.Message);
            }
        });

         return false;
     });
   });
  </script>

and the controller action looks like this : 控制器动作如下所示:

[HttpPost]
public JsonResult registration(Solnet_HotelSuite.Models.UserModels user, string userID)
{
    try
    {   
        if (ModelState.IsValid)
        {
            if (userExist(user.user_name))
            {
                ViewBag.res = "User exist in record";

                return Json(new { Message = "User Registartion failed" });
            }
        }

        //var crypto = new SimpleCrypto.PBKDF2();

        using (var db = new DBEntity()) 
        {
            var query = (from p in db.RolesModels
                         where p.Caption == userID
                         select p.RoleId).Single();

            var sysUser = db.UserModels.Create();
            sysUser.user_name = user.user_name;
            sysUser.user_pass = user.user_pass;
            sysUser.UserEmail = user.UserEmail;
            sysUser.RegDate = user.RegDate;

            sysUser.RoleId = query;
            sysUser.Roles = user.Roles;
            sysUser.status = user.status;
            db.UserModels.Add(sysUser);
            db.SaveChanges();
        }

        var db1 = new DBEntity();
        ViewBag.Roles = db1.RolesModels.Select(r => r.Caption);
        ViewBag.RolesId = db1.RolesModels.Select(r => r.RoleId);
    }

    catch (DbEntityValidationException dbEx)
    {

    }

    if (!Request.IsAjaxRequest())
    {
        return Json(new { Message = "User Registartion successful"});
    }

    else 
    {
        return Json(new { Message = "User Registartion failed" });
    }

}

I keep getting "undefined" in the alert. 我不断收到警报中的“未定义”。 I don't know what I am doing wrong. 我不知道我在做什么错。

use IsValid-condition on all yor logic. 在所有逻辑上使用IsValid-condition。 Try Catch should be on your savechanges method. Try Catch应该在您的savechanges方法上。

use using to dispose your connection 使用来处置您的连接

[HttpPost]
public JsonResult registration(Solnet_HotelSuite.Models.UserModels user, string userID)
{
    try
    {   
        if (ModelState.IsValid)
        {
            if (userExist(user.user_name))
            {
                ViewBag.res = "User exist in record";

                return Json(new { Message = "User Registartion failed" });
            }

            using (var db = new DBEntity()) 
            {
                var query = (from p in db.RolesModels
                         where p.Caption == userID
                         select p.RoleId).Single();

                var sysUser = db.UserModels.Create();
                sysUser.user_name = user.user_name;
                sysUser.user_pass = user.user_pass;
                sysUser.UserEmail = user.UserEmail;
                sysUser.RegDate = user.RegDate;

                sysUser.RoleId = query;
                sysUser.Roles = user.Roles;
                sysUser.status = user.status;
                db.UserModels.Add(sysUser);
                try{
                     db.SaveChanges();
                }
                catch (DbEntityValidationException dbEx)
                {
                     return Json(new { Message = "User Registartion failed" });
                }      
            }
            using (var db = new DBEntity()) 
            {
                ViewBag.Roles = db.RolesModels.Select(r => r.Caption);
                ViewBag.RolesId = db.RolesModels.Select(r => r.RoleId);
            }

            return Json(new { Message = "User Registartion successful"});
        }
        else
            return Json(new { Message = "User Registartion failed" });

    }         
 }

} }

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM