我的代码中有此ajax post方法,该方法返回未定义。我认为是因为我没有传递任何数据,我们将不胜感激。
我尝试使用@ Url.Action Helper传递url字符串,并在ajax方法的success参数中将数据作为参数传递。
// jquery ajax post方法
function SaveEvent(data) {
$.ajax({
type: "POST",
url: '@Url.Action("Bookings/SaveBooking")',
data: data,
success: function (data) {
if (data.status) {
//Refresh the calender
FetchEventAndRenderCalendar();
$('#myModalSave').modal('hide');
}
},
error: function (error) {
alert('Failed' + error.val );
}
})
}
//控制器动作
[HttpPost]
public JsonResult SaveBooking(Booking b)
{
var status = false;
using (ApplicationDbContext db = new ApplicationDbContext())
{
if (b.ID > 0)
{
//update the event
var v = db.Bookings.Where(a => a.ID == a.ID);
if (v != null)
{
v.SingleOrDefault().Subject = b.Subject;
v.SingleOrDefault().StartDate = b.StartDate;
v.SingleOrDefault().EndDate = b.EndDate;
v.SingleOrDefault().Description = b.Description;
v.SingleOrDefault().IsFullDay = b.IsFullDay;
v.SingleOrDefault().ThemeColor = b.ThemeColor;
}
else
{
db.Bookings.Add(b);
}
db.SaveChanges();
status = true;
}
}
return new JsonResult { Data = new { status } };
}
答案 0 :(得分:1)
尝试将contentType:'Application/json',
添加到您的ajax中,只需:
return Json(status);
在您的控制器中而不是JsonResult。除此之外,您还需要将ajax代码中的数据作为字符串化的Json传递,例如:
data:JSON.stringify(data),
此外,是否特别没有理由为什么它是JsonResult
方法?
答案 1 :(得分:1)
在进行ajax调用之前,您应该将数据收集在类似对象中,
var requestData= {
ModelField1: 'pass the value here',
ModelField2: 'pass the value here')
};
请注意,我仅添加了两个字段,但是根据您的类声明,您可以包括所有字段。
应该像:
function SaveEvent(data) {
$.ajax({
type: "POST",
url: '@Url.Action(Bookings,SaveBooking)',
data: JSON.stringify(requestData),
dataType: 'json',
contentType: 'application/json; charset=utf-8',
success: function (data) {
if (data.status) {
//Refresh the calender
FetchEventAndRenderCalendar();
$('#myModalSave').modal('hide');
}
},
error: function (error) {
alert('Failed' + error.val );
}
})
}