ajax - 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; }
}
}
解决方案
我的代码中有很多问题。我在下面列出它。
主要的,我认为问题是我的文本框的 ID,因为我使用的是 Razor Engine,它会自动创建 ID,这会导致问题,所以我通过手动添加 ID 和名称来修复它,比如
@Html.EditorFor(model => model.address.Details, new { htmlAttributes = new { @class = "form-control", Name="Details", Id="Details"} })
我已将我的 ajax 数据代码更改为:
FName: fname, LName: lname, Email: email, address: { Details: details, Country: country, State: state }
对于成功消息,我在控制器中更改了返回消息,例如:
var scess = "数据添加成功"; return Json(new { success = true, scess }, JsonRequestBehavior.AllowGet);
在我看来,我在我的 ajax 成功调用中添加了这一行:
success: function (data) {
$("#msg").text(data.scess);
console.log(data);
},
希望这对将来的其他用户也有帮助。
推荐阅读
- neo4j - neo4j 浏览器报告完全不切实际的运行时
- javascript - 如何在当前页面上保留最后一个关键帧上的导航栏元素的动画?
- typescript - 生成构建器函数类型接口的 Typescript 泛型
- spring-boot - 树莓派中的 Java Springboot 构建失败
- libreoffice - 如何以编程方式在 LibreOffice Calc 中触发 AutoFit / SetOptimalHeight?
- git - Ubuntu 20.04 在 gr-iio cmake 期间找不到 MPIR
- ios - 如何在 SwiftUI 中创建启动屏幕?我不使用故事板
- html - 为什么 span 会出现奇怪的现象?
- swift - 为什么设置约束后我的子视图边界(0,0,0,0)?
- python - 在 vscode 中重构时如何忽略文件夹?