【问题标题】:ASP.NET MVC Result Return HelperASP.NET MVC 结果返回帮助器
【发布时间】:2009-11-23 14:23:38
【问题描述】:

我发现自己需要从我的控制器操作中将各种 JSON 结果返回给客户端。我创建了 ContentResult 类型的静态“助手”方法。我希望能够在多个项目中重用这些帮助程序,因此我在它们自己的类中创建了它们,并且很快有一天我会将它们移动到它们自己的程序集中。

这是我的问题:其中一些返回帮助程序需要访问控制器上下文,因此我在控制器上创建了 then 作为扩展方法。我喜欢 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
        };
    }

【问题讨论】:

  • 使用 JsonResult 代替 ContentResult

标签: asp.net-mvc json


【解决方案1】:

你可以使用这个代码:

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

扩展控制器似乎是个好方法。 Content()、View()、Json()、Empty() 方法也是 Controller 扩展。您正在添加自己的。

编辑

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

【讨论】:

  • 如果它们是控制器上的扩展,而我的也是,那为什么我必须像这样调用我的:this.AJAXRedirect() 但我不必与其他人一起使用它?
  • @LukLed,我确实有一个基本控制器类,但是很多项目特定的东西最终都会进入它,所以在项目之间共享它是不切实际的。我虽然在某处读到过有关获得 Result Helpers 的正式方法,但我现在找不到。
  • @Josh Pearce:您不必使用一个基本控制器类。您可以为每个项目创建一个,从它继承,并为特定项目创建另一个独立的。
猜你喜欢
  • 2013-05-26
  • 1970-01-01
  • 1970-01-01
  • 2010-12-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多