2009-11-23 78 views
0

我发现自己需要从控制器操作中将各种JSON结果返回给客户端。我已经创建了ContentResult类型的静态“辅助”方法。我希望能够在多个项目中重用这些助手,所以我已经在他们自己的课堂上创建了这些助手,并且不久之后我会将它们移到自己的程序集中。ASP.NET MVC结果返回助手

这是我的问题:这些返回帮助器中的一些需要访问控制器上下文,所以我创建了作为控制器上的扩展方法。我喜欢Html Helper方法是HtmlHelper类的扩展方法,但我找不到类似于View类的Html属性的合适的控制器属性,所以我只是扩展了控制器。 以下是返回帮助程序的代码。我想知道是否有更好的方法来做到这一点。

public static ContentResult AJAXRedirect(this Controller cont, string action, 
     string controller, object routeValues) 
    { 
     string url = cont.Url.Action(action, controller, routeValues); 
     string json = "{{\"redirect\": \"{0}\" }}"; 
     json = string.Format(json, url); 
     return new ContentResult 
     { 
      Content = json, 
      ContentType = "text/x-json", 
      ContentEncoding = Encoding.UTF8 
     }; 
    } 
+5

使用JsonResult而不是ContentResult – 2009-11-23 14:29:46

回答

2

您可以使用此代码:

string url = cont.Url.Action(action, controller, routeValues); 
return Json(new { redirect : url }); 

扩展的控制器似乎是不错的方法。 Content(),View(),Json(),Empty()方法也是Controller的扩展。你正在添加你自己的。

编辑

对不起,我其实是错的扩展方法。它们不是扩展方法。因此,如果您使用自己的基本Controller类和其他方法,会更好。既然你会在你的类中使用这些方法,继承是最好的解决方案。你仍然可以在项目之间分享这个类。

+0

如果它们是控制器上的扩展并且我的控制器也是这样,那么为什么我必须调用我的:this.AJAXRedirect(),但是我不必将其与其他控件一起使用? – 2009-11-23 14:46:06

+0

@LukLed,我确实有一个基础控制器类,但是很多项目特定的东西最终都会进入它,所以在项目之间共享它是不现实的。尽管我在某处阅读了有关结果助手的正式方法,但我现在找不到它。 – 2009-11-23 16:02:27

+1

@Josh Pearce:你不必使用一个基础控制器类。您可以为每个项目创建一个项目,从中继承,并为特定项目创建另一个独立项目。 – LukLed 2009-11-23 16:12:59