Asp.net mvc 如何在通过部分视图提交表单后更新父视图?
我有一个视图,当教师登录时,它列出了学生的完整详细信息,还列出了教师登录时交给学生的任务。如果教师想要为学生创建一个新任务,他单击createnew链接,该链接依次向控制器发出Ajax调用:Asp.net mvc 如何在通过部分视图提交表单后更新父视图?,asp.net-mvc,asp.net-ajax,partial-views,Asp.net Mvc,Asp.net Ajax,Partial Views,我有一个视图,当教师登录时,它列出了学生的完整详细信息,还列出了教师登录时交给学生的任务。如果教师想要为学生创建一个新任务,他单击createnew链接,该链接依次向控制器发出Ajax调用: @Ajax.ActionLink("Create", "CreateTask", "Task", new { id = Model.StudentId }, new AjaxOptions { HttpMethod = "GET",
@Ajax.ActionLink("Create", "CreateTask", "Task", new { id = Model.StudentId },
new AjaxOptions
{
HttpMethod = "GET",
InsertionMode = InsertionMode.Replace,
UpdateTargetId = "create-div"
}, new { @class = "btn btn-default" })
它返回一个局部视图
[HttpGet]
public ActionResult CreateTask(int ?id)
{
//........
return PartialView("PartialViews/Task/_CreateTaskPartial");
}
在部分视图中,我使用Ajax.BeginForm提交数据以创建实际任务,如下所示
@using (Ajax.BeginForm("CreateTask", "Task",new AjaxOptions { UpdateTargetId = "create-div", InsertionMode = InsertionMode.Replace }))
{
// Form data
}
最后,在CreateTask控制器中,我创建了任务
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Create([Bind(Include="TaskId")] Task @task)
{
if (ModelState.IsValid)
{
db.Tasks.Add(@task);
db.SaveChanges();
// If everything is successfull return empty
return new EmptyResult();
}
// If model errors send the view back
return PartialView("PartialViews/Task/_CreateTaskPartial", @task);
}
它成功创建新任务,但不更新列出学生详细信息和已创建任务列表的主视图。我必须刷新页面才能看到添加的最后一个任务
如何使通过部分视图添加第六个任务时,成功后更新父视图并列出第六个任务
我在MVC方面不是很有经验,所以请纠正我哪里做错了。我解决了它,我得到了来自的帮助来解决它 因此,我所做的不是在创建任务时返回一个EmptyResult(),而是返回一个JSON对象
if (ModelState.IsValid)
{
db.Tasks.Add(@task);
db.SaveChanges();
// If everything is successfull return empty
//return new EmptyResult();
return Json(new { ok = true, url = Url.Action("Details","Student",new{id=@event.StudentId}) });
}
部分视图中的一个d,用于提交表单以创建我在Ajax.BeginForm中的AjaxOptions中添加的OnSuccess参数,该参数调用javascript函数
@using (Ajax.BeginForm("CreateTask", "Task",new AjaxOptions { UpdateTargetId = "create-div", InsertionMode = InsertionMode.Replace,OnSuccess = "onSuccess" }))
{
// Form data
}
最后在“onSuccess”函数中,我检查结果是否正确,然后重定向到控制器给出的结果中的url
var onSuccess = function doIt(result) {
if (result.ok) {
window.location.href = result.url;
}
};