【发布时间】:2011-12-30 16:08:01
【问题描述】:
以我的控制器中编辑操作的以下代码为例:
// POST: /Admin/Text/Edit/5
[HttpPost]
[ValidateInput(false)]
public virtual ActionResult Edit(TextViewModel editing)
{
if (!ModelState.IsValid)
return View(editing);
Text existing = _repository.Find(editing.Id);
if (TryUpdateModel(existing)) {
_repository.Update(existing);
if(Request.IsAjaxRequest())
return Content(bool.TrueString);
else
return RedirectToAction(pndng.Admin.Text.List());
}
else return View(editing);
}
我希望此操作执行的是处理经典(非 AJAX form)和 AJAX (jquery) POST。在 AJAX POST 的情况下,请求很可能来自内联编辑表单。在这种情况下,操作应该只返回Content=Ok 结果。如果我们一直在表单页面中编辑模型并执行经典的postback,我们希望将用户重定向回内容列表(请参阅RedirectToAction())。
然而,困扰我的是if..else 子句。我想把它抽象成一个动作过滤器/属性。我想保留重定向调用(因为这是默认设置),但如果它检测到请求实际上是 AJAX 请求,则让操作过滤器对其进行操作,这意味着停止重定向并仅返回 ContentResult 或 @ 987654328@.
如果您认为我的工作流程有误,请随时回复。
【问题讨论】:
-
如果
TryUpdateModel返回false并且它是一个ajax 请求会发生什么? -
我明白你的意思。这段代码 sn-p 确实缺少这一点。这是尝试通过一项操作涵盖多个用例时的问题之一。
标签: asp.net ajax asp.net-mvc-3