我有一个名为 JobStatus 的简单模型,并且我正在使用 Ajax Actionlink 在索引视图中启用编辑功能。
我的问题是,如果在编辑项目时出现模型错误,我不知道如何将项目带回模型。
我的控制器中的索引操作:
public ActionResult Index()
{
return View(db.JobStatuses.OrderBy(x => x.JobStatusID).ToList());
}
这是我的索引视图:
@model IEnumerable<Project.Models.JobStatus>
@foreach (var item in Model)
{
<div id='@string.Format("div_{0}", item.JobStatusID)'>
@item.JobStatusID
@item.Name
@item.Description
@Ajax.ActionLink("Edit", "Edit", new { id = item.JobStatusID }, new AjaxOptions() { HttpMethod = "GET", UpdateTargetId = string.Format("div_{0}", item.JobStatusID) })
</div>
}
这是我的编辑 GET 请求:
public ActionResult Edit(string id = null)
{
JobStatus jobstatus = db.JobStatuses.Find(id);
if (jobstatus == null)
{
return HttpNotFound();
}
return PartialView(jobstatus);
}
我的edit.cshtml:
@model Project.Models.JobStatus
@using Microsoft.Ajax;
@using (Html.BeginForm())
{
@Html.AntiForgeryToken()
@Html.HiddenFor(model => model.JobStatusID)
@Html.TextBoxFor(model => model.Name, null, new { @class = "form-control" })
@Html.TextBoxFor(model => model.Description, null, new { @class = "form-control" })
<input type="submit" value="Save" />
}
最后是我的编辑 POST 方法:
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Edit(JobStatus jobstatus, string action)
{
if (ModelState.IsValid)
{
db.Entry(jobstatus).State = EntityState.Modified;
db.SaveChanges();
return RedirectToAction("Index");
}
// Not sure what to do here, how to I repopulate my index form?
return RedirectToAction("Index");
}
目前,在模型状态失败时,用户只是被重定向到索引页面 - 我想要简单地重新显示索引表单,启用并填充适当的编辑表单,并显示任何验证错误。
我尝试重定向到我的编辑操作,但这只是在新页面上显示我的表单,没有我的索引表单(因为目前我的编辑操作是一个 ajax 操作)
当然,如果有更好的方法来实现这一点,请告诉我!