【发布时间】:2012-03-30 03:03:06
【问题描述】:
我想让控制器中的操作更加灵活。我的意思是 common Action 通常会返回:
...
return View("someView");
或者,例如,如果 Ajax:
...
return Json(new {result="ok"});
我想要的是让我的操作更“多用途”。例如,我基于简单的非 Ajax 请求制作了我的 UI 层,然后我决定让它更加用户友好并添加一些 Ajax。这样我必须纠正一些动作以返回 Json。
避免此类事情的最简单(也可能是最糟糕)的方法是在每个(或几乎每个)Action 中编写以下代码:
if (Request.IsAjaxRequest) {
return Json(new {result="ok"});
}
else {
return View("someView")
}
当然这样的方法完全违背了DRY的原则。
所以我想找到实现“多用途”的良好做法。
一种方法是编写一些这样的辅助方法:
public ActionResult CheckForAjax(ActionResult result)
{
return ActionResult(result, Json(new {result="ok"}));
}
public ActionResult CheckForAjax(ActionResult result, Json json)
{
if (Request.IsAjaxRequest) {
return json;
}
else {
return result;
}
}
这样我可以在 Actions 中调用助手:
return CheckForAjax(View(...));
或
return CheckForAjax(View(...), Json(new {myCustomJson="hi"});
但我不知道这是好方法还是只是重新发明一些自行车 :) 也许使用动作过滤器更好?但我不知道如何将自定义 Json 传递给该过滤器...
感谢您的任何建议
【问题讨论】:
-
您的原始解决方案更好,因为它是显式。
标签: ajax asp.net-mvc