Ajax POST 插入一半数据(部分数据丢失) Asp.Net MVC Ajax

Ajax POST insert half data(some data is missed) Asp.Net MVC Ajax

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

当我使用直接控制器方法时,数据会插入到两个 table 中,但是当我使用 Ajax 时,数据只会插入到一个 table.[=20 中=]

我的旧控制器代码:

[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;

            });
});

数据仅插入到学生 table 中,地址 table 它 returns null/empty 并且数据被跳过,尽管相同的代码可以工作,如果我删除 Ajax。但我想使用 Ajax 这样事情就会顺利进行。

任何帮助将不胜感激。

更新:学生模型class:

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

我的学生class属性

 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; }
}

我的地址Class属性

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

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

  1. 主要问题是我的文本框的 ID,因为我使用的是 Razor 引擎,它会自动创建 ID,这会导致问题,所以我通过添加来修复它手动输入 Id 和 Name,例如

    @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. 对于成功消息,我在控制器中更改了 Return 消息,例如:

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

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

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

                    },

希望这对以后的其他用户也有帮助。