我通过Ajax Post方法插入数据。数据被插入到一个表中,但另一个表的数据没有被插入。我已经检查了代码,但我不确定我的代码中缺少什么。
当我使用直接控制器方法时,数据将插入到两个表中,但当我使用Ajax时,数据仅插入到一个表中。
My Old working Controller code:
[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/空,数据被跳过,尽管如果我删除Ajax,相同的代码将工作。但是我想使用Ajax,这样事情就会顺利地进行。
任何帮助都将不胜感激。
更新:Student Model class:
我使用N-Tire/3-Tire Architecture
My Student class Properties
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; }
}
My Address Class Properties
public class AddressModel
{
public int Id { get; set; }
public string Details { get; set; }
public string State { get; set; }
public string Country { get; set; }
}
}
我的代码中有很多问题。我把它列在下面。
-
主要,我认为情况下的问题是我的文本框的Id,因为我使用剃刀引擎,它自动创建Id,这导致了这个问题,所以我通过手动添加Id和名称来修复它,如
@Html。EditorFor(模型=比;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 success = "数据添加成功"返回Json(new {success = true,成功},JsonRequestBehavior.AllowGet);
在我看来,我已经添加了这一行在我的ajax成功调用:
success: function (data) {
$("#msg").text(data.scess);
console.log(data);
},
希望这对其他用户也有帮助。