【问题标题】:ASP.NET MVC: How to covert an ActionResult to string?ASP.NET MVC:如何将 ActionResult 转换为字符串?
【发布时间】:2011-01-03 15:30:42
【问题描述】:

我想采用现有的操作方法,将其返回值呈现为字符串并将其作为 JSON 发送以响应 AJAX 请求。

为此,我需要将 ActionResult 呈现为字符串。我该怎么做?

相反,我们可以使用 this.Content() 将字符串转换为 ActionResult。

更新

现有的第一个动作方法返回一个 ActionResult 类型,但它实际上返回一个 ViewResult 以响应 HTTP 发布请求。我有第二个动作方法(我的外观),它返回一个响应 AJAX 请求的 JsonResult。我希望这个第二个动作方法使用第一个动作方法来呈现 HTML。

总的来说,我想要一个 ActionResult(从一个动作方法生成)不仅可以通过标准 HTTP 帖子检索,还可以通过 AJAX 请求通过外观动作方法(第二个动作方法)检索。这样,作为开发人员,我可以选择使用 HTTP Post 或 AJAX 来检索页面的呈现。

抱歉,我试图使此更新尽可能短。谢谢。

【问题讨论】:

  • 当然ContentResultJsonResult 是你想要的。

标签: asp.net-mvc string json actionresult actionmethod


【解决方案1】:

您在寻找下面的 4 号还是 6 号?

here中提取的文本:

了解操作结果

控制器动作返回一个叫做动作结果的东西。动作结果是控制器动作响应浏览器请求返回的结果。

ASP.NET MVC 框架支持多种类型的操作结果,包括:

  1. ViewResult - 表示 HTML 和标记。
  2. EmptyResult - 表示没有结果。
  3. RedirectResult - 表示重定向到新 URL。
  4. JsonResult - 表示可在 AJAX 应用程序中使用的 JavaScript 对象表示法结果。
  5. JavaScriptResult - 表示 JavaScript 脚本。
  6. ContentResult - 表示文本结果。
  7. FileContentResult - 表示可下载的文件(带有二进制内容)。
  8. FilePathResult - 表示可下载的文件(带有路径)。
  9. FileStreamResult - 表示可下载文件(带有文件流)。

所有这些操作结果都继承自基本的 ActionResult 类。

【讨论】:

  • #6 是我想要的。谢谢! +1
【解决方案2】:

将其返回为 ContentResult 而不是 ActionResult

我使用类似的东西

    public ContentResult Place(string person, string seat)
    {
        string jsonString = null;
        try
        {

            jsonString = AllocationLogic.PerformAllocation(person, seat);
        }
        catch {
            jsonString = AllocationLogic.RaiseError(timeout);
        }
        return Content(jsonString);
    }

【讨论】:

  • JsonResult 可能是更好的选择。
  • 我认为你可能是对的......我可能会再看看我的代码 :-)
【解决方案3】:

你确定JsonResult 不是你想要的吗?如果您调用Controller 中定义的Json(object jsonObject) 方法,它会将jsonObject 序列化为JSON 并返回适当的响应(所有标头都正确设置)。一般 JSON 请求需要 POST,但您也可以将其配置为允许 GET。

【讨论】:

  • 现有的操作方法返回一个ActionResult,但它实际上返回一个ViewResult。我无法为现有的 Action 方法返回 JsonResult,但我会使用 JsonResult 作为将发送 Json 的 Action 方法。有两种方法需要考虑。
  • 但是为什么 AJAX 请求需要整个页面呢?它会收到太多信息,包括文档类型、头部、正文等。AJAX 请求不只需要一大块数据吗?您是否考虑过使用Request.IsAjaxRequest() 让一个操作同时处理两种情况?
猜你喜欢
  • 2020-05-31
  • 2011-07-20
  • 1970-01-01
  • 2010-09-09
  • 2014-10-26
  • 2011-05-08
  • 1970-01-01
  • 2022-08-23
  • 1970-01-01
相关资源
最近更新 更多