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

时间:2011-06-13 07:31:45

标签: asp.net-mvc ajax model-view-controller asp.net-mvc-3 architecture

对于ajax调用actionresult我正在考虑两个选项

  1. 将行动结果放入 控制器最适合他们的功能
  2. 为ajax调用创建一个单独的控制器
  3. 在第二种方法中,我可以使用单独的文件来功能划分控制器,并在每个文件中使用部分ajaxcontroller类。 如果有一些actionfilter属性我想要应用于除ajax动作以外的动作结果,则第二个选项可能会有用。例如,Authorize属性可以应用于正常动作结果。我可以在ajax actionresults上使用Ajaxonly属性来保护它们 您更喜欢哪个选项

1 个答案:

答案 0 :(得分:5)

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

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

回答您的更新

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