0

我有一个名为 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 操作)

当然,如果有更好的方法来实现这一点,请告诉我!

4

1 回答 1

0

你不能RedirectToAction用 Ajax Post 来做。

查看asp.net mvc ajax 帖子-redirecttoaction 不起作用

但是可以通过以下方式加载

[HttpPost]
[ValidateAntiForgeryToken]
public JsonResult Edit(JobStatus jobstatus, string action)
{
    if (ModelState.IsValid)
    {
        db.Entry(jobstatus).State = EntityState.Modified;
        db.SaveChanges();           
        return RedirectToAction("Index");
    }

    return Json(new{id=jobStatus, success=true})
}

从服务器获取 JSON 结果后,您可以使用返回的 id 加载相同的结果

$.post('/jobs/edit',{data:$(form).serialize()},function(data){
if(data.success){
  $.get('/jobs/index/'+data.id,{},function(data){
   $('#container').html(data);
  });
}

});
于 2013-09-24T13:21:15.113 回答