我发现自己需要从控制器操作向客户端返回各种JSON结果。我已经创建了ContentResult类型的静态“帮助器”方法。我希望能够在多个项目中重用这些帮助器,所以我已经在他们自己的类中创建了它们,并且很快我将把它们移动到自己的程序集中。
这是我的问题:其中一些返回助手需要访问控制器上下文,因此我在Controller上创建了扩展方法。我喜欢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
};
}
答案 0 :(得分:2)
您可以使用此代码:
string url = cont.Url.Action(action, controller, routeValues);
return Json(new { redirect : url });
扩展控制器似乎是个好方法。 Content(),View(),Json(),Empty()方法也是Controller扩展。你正在添加自己的。
修改强>
对不起,我对扩展方法实际上是错误的。它们不是扩展方法。因此,如果您使用自己的基本Controller类和其他方法会更好。由于您将在类中使用这些方法,因此继承是最佳解决方案。你仍然可以在项目之间分享这个课程。