【问题标题】:Ajax POST insert half data(some data is missed) Asp.Net MVC AjaxAjax POST 插入一半数据(一些数据丢失) Asp.Net MVC Ajax
【发布时间】:2021-05-29 18:17:01
【问题描述】:

我通过 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;

            });
});

数据仅插入到学生表中,对于地址表,它返回 null/empty 并跳过数据,但如果我删除 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; }
    }
}

【问题讨论】:

  • 你能发布 StudentModel 、 Student 和 Address 类吗?
  • 我已经更新了代码。
  • 谢谢,但我猜你也有 Student 和 Addresses 课程?
  • 数据插入问题几乎已处理,但现在我没有收到我在视图包中设置的成功消息。你可以在上面的控制器代码中看到它。

标签: ajax asp.net-mvc asp.net-ajax


【解决方案1】:

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

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

                    },

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-08-12
    • 2018-11-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多