【发布时间】:2017-11-21 05:23:25
【问题描述】:
我不明白为什么会发生此错误。我有一个名为 SitePlanSaveTask 的方法,它创建新计划并在成功保存时返回 Json True。现在,当我调试计划成功保存的方法时,Json 总是返回 true。但在视图中它总是给出错误信息。我的问题是如果我的 Json 返回 true 那么为什么它不进入 Ajax 请求条件。
控制器:
public ActionResult Create()
{
if (!User.IsInRole("Management"))
{
return RedirectToAction("AccessDenied", "Error");
}
ViewBag.ProjectId = new SelectList(db.Project, "Id", "Name");
ViewBag.StartDate = DateTime.Now.Date;
ViewBag.EndDate = DateTime.Now.Date;
ViewBag.PlanDate = DateTime.Now.ToShortDateString();
var status = new SelectList(new List<SelectListItem> { new SelectListItem { Text = "Active", Value = "A" }, new SelectListItem { Text = "Inactive", Value = "I" }, }, "Value", "Text");
ViewBag.Status = status;
List<ProjectTask> taskList = db.ProjectTask.ToList();
ViewBag.ProjectTask = taskList;
return View();
}
public JsonResult SitePlanSaveTask(string name)
{
ProjectTask projectTask = new ProjectTask();
projectTask.Name = name;
var check = db.ProjectTask.Where(x => x.Name == name).Count();
bool flag = false;
if (check == 0)
{
db.ProjectTask.Add(projectTask);
flag = db.SaveChanges() > 0;
}
return Json(new { flag = flag, Id = projectTask.Id }, JsonRequestBehavior.AllowGet);
}
查看:
$("#btnAddTask").click(function (e) {
e.preventDefault();
$.ajax({
type: "POST",
url: "/ProjectSitePlanTasks/SitePlanSaveTask",
data: {
name: $("#TName").val()
},
dataType: "json",
contentType: "application/json",
success: function (result) {
console.log(result);
if (result.flag)
{
alert("Record saved successfully!");
window.location = "/ProjectSitePlanTasks/Create";
}
else
{
alert("Saving failed!");
}
},
error: function (result)
{
alert('error');
}
});
});
【问题讨论】:
-
首先删除
contentType: "application/json",。您收到哪条错误消息 - 保存失败! 或 错误? -
而 ajax 的全部目的是保持在同一页面上。您在回调中有
window.location = "...";的事实意味着您不应该使用ajax。只需进行正常提交,即可节省编写此不必要脚本的时间。 -
@vipincp,这就是您检查
ModelState的原因,如果无效,您将返回视图,以便显示验证消息等,用户可以更正它们。当前的代码甚至没有指出错误是什么或者用户应该怎么做:) -
window.location=".."正在刷新整个页面 :) 如果您想保持在同一页面上并且只更新部分 DOM,那么您只需在success回调中执行此操作。您尚未指明要更新的内容,但假设您要显示新的Id值,那么如果元素是输入,它可能类似于$(someElement).val(result.Id); -
@StephenMuecke 是的,斯蒂芬。我只想指出,即使在 SUCCESS 上有重定向,我们也需要使用 ajax。我理解你的担心。感谢您指出。
标签: jquery asp.net json ajax asp.net-mvc