首页 > 解决方案 > Ajax POST 插入一半数据(一些数据丢失) Asp.Net MVC Ajax

问题描述

我通过 Ajax Post 方法插入数据。数据被插入到一个表中,但第二个表的数据没有插入。我已经检查了代码,但我不确定我的代码中缺少什么。

当我使用直接控制器方法时,数据会插入两个表中,但是当我使用 Ajax 时,数据只插入一个表中。

我的旧工作控制器代码:

[HttpPost]
         public ActionResult Create(StudentModel model)
         {
             if(ModelState.IsValid)
             {
                 int id = stude.AddStudent(model);
                 if(id>0)
                 {
                     ModelState.Clear();
                     ViewBag.Success = "Data added Successfully";
                   
               }
             }
             return View();
         }

我的 Ajax 控制器代码:

 [HttpPost]
        public JsonResult Creates(StudentModel model)
        {
            if (ModelState.IsValid)
            {
                int id = stude.AddStudent(model);
                if (id > 0)
                {
                    ModelState.Clear();
                    ViewBag.Success = "Data added Successfully";
                    return Json("success", JsonRequestBehavior.AllowGet);
                }
            }

            return Json("issue", JsonRequestBehavior.AllowGet);
        }

我的模型代码:

public int AddStudent(StudentModel stu)
        {
            student stud = new student()
            {
                FName = stu.FName,
                LName = stu.LName,
                Email = stu.Email

            };
            if (stu.address != null) {
                stud.address= new address()
                {
                    Details = stu.address.Details,
                    Country = stu.address.Country,
                    State = stu.address.State

                };
            }
            using (var context = new StudentEntities())
            {
                    context.students.Add(stud);
                    context.SaveChanges();
                }
                    
                
               
                return stud.Id;
            
        }

我的 Js/Ajax 代码:

 $(document).ready(function () {

            //Add record
            $("#add").click(function (e) {
                e.preventDefault();

                // var id = $();
                var fname = $("#FName").val();
                var lname = $("#LName").val();
                var email = $("#Email").val();
                var details = $("#Details").val();
                var country = $("#Country").val();
                var state = $("#State").val();


                $.ajax({
                    async: true,
                    method: "POST",
                    url: '@Url.Action("Creates")',
                    data: JSON.stringify({
                        FName: fname, LName: lname, Email: email, Details: details,County: country, State: state
                    }),
                    dataType: 'JSON',
                    contentType: "application/json; charset=utf-8",
                    success: function (data) {
                        //window.location = data.newurl;
                        console.log(data);

                    },
                    error: function (err) {
                        alert('Failed to get data' + err);
                    }
                });
                return false;

            });
});

数据仅插入学生表中,对于地址表,它返回空/空并且数据被跳过,尽管如果我删除 Ajax,相同的代码将起作用。但我想使用 Ajax,这样事情就会顺利进行。

任何帮助将不胜感激。

更新:学生模型班:

我正在使用 N-Tire/3-Tire 架构

我的学生班级属性

 public class StudentModel
{
    public int Id { get; set; }
    public string FName { get; set; }
    public string LName { get; set; }
    public string Email { get; set; }
    public Nullable<int> AddressId { get; set; }

    public AddressModel address { get; set; }
}

我的地址类属性

 public class AddressModel
    {
        public int Id { get; set; }
        public string Details { get; set; }
        public string State { get; set; }
        public string Country { get; set; }
    }
}

标签: ajaxasp.net-mvcasp.net-ajax

解决方案


我的代码中有很多问题。我在下面列出它。

  1. 主要的,我认为问题是我的文本框的 ID,因为我使用的是 Razor Engine,它会自动创建 ID,这会导致问题,所以我通过手动添加 ID 和名称来修复它,比如

    @Html.EditorFor(model => model.address.Details, new { htmlAttributes = new { @class = "form-control", Name="Details", Id="Details"} })

  2. 我已将我的 ajax 数据代码更改为:

    FName: fname, LName: lname, Email: email, address: { Details: details, Country: country, State: state }

  3. 对于成功消息,我在控制器中更改了返回消息,例如:

    var scess = "数据添加成功"; return Json(new { success = true, scess }, JsonRequestBehavior.AllowGet);

在我看来,我在我的 ajax 成功调用中添加了这一行:

 success: function (data) {
                       
                        $("#msg").text(data.scess);
                        console.log(data);

                    },

希望这对将来的其他用户也有帮助。


推荐阅读