用于ajax动作的独立控制器在asp.net mvc 3中的结果

Tas*_*que 3 architecture ajax model-view-controller asp.net-mvc asp.net-mvc-3

对于ajax调用actionresult我想到两个选项

  1. 将动作结果放在最适合其功能的控制器中
  2. 为ajax调用创建一个单独的控制器

在第二种方法中,我可以使用单独的文件来功能划分控制器并ajaxcontroller在每个文件中使用部分类.如果有一些actionfilter属性我想要应用于除ajax动作以外的动作结果,则第二个选项可能会有用.例如,Authorize属性可以应用于正常动作结果.我可以在ajax actionresults上使用Ajaxonly属性来保护它们
你更喜欢哪个选项

jga*_*fin 5

你为什么要那样做?对我来说,控制器绑定到某个模型,而不是某种类型的输出格式.

public ActionResult Users()
{
    var users = _repository.Find(); 
    var viewModel  = Mapper.Map(users); // automapper or similar
    return Request.IsAjax() ? Json(viewModel) : View(viewModel);
}
Run Code Online (Sandbox Code Playgroud)

要回答您的更新

最好创建一个CustomAuthorizeAttribute检查它是ajax请求还是常规请求并进行适当的授权.您的控制器不应该知道授权的方式.