ASP.NET MVC:如何将ActionResult转换为字符串?

8
我想采用现有的 action 方法,将其返回值渲染为字符串,并以 JSON 的形式发送作为对 AJAX 请求的响应。要做到这一点,我需要将 ActionResult 渲染为字符串。如何实现呢?
我们可以使用 this.Content() 将字符串转换为 ActionResult。
更新:
现有的第一个 action 方法返回类型为 ActionResult,但实际上返回的是 ViewResult 以响应 HTTP Post 请求。我有一个第二个 action 方法(我的门面),它返回 JsonResult 以响应 AJAX 请求。我希望这个第二个 action 方法使用第一个 action 方法来渲染 HTML。
在大局观中,我希望能够通过门面 action 方法(第二个 action 方法)检索到由 action 方法生成的 ActionResult,不仅适用于标准的 HTTP Post,而且也适用于 AJAX,以获取页面的渲染结果。这样,作为开发人员,我就可以选择使用 HTTP Post 还是 AJAX 来检索页面的渲染结果。
抱歉,我尽可能简短地说明了更新内容。谢谢。

1
你肯定想要使用ContentResult或者JsonResult - Dan Atkinson
3个回答

6

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

文本摘自此处

理解操作结果

控制器操作返回一种称为操作结果的东西。操作结果是控制器操作以响应浏览器请求返回的内容。

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。


1
将其作为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);
    }

2
JsonResult 可能是更好的选择。 - Matt Greer
1
我认为你可能是对的...我可以再看看我的代码 :-) - Andiih

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

现有的操作方法返回一个ActionResult,但实际上它返回的是ViewResult。我不能为现有的Action方法返回JsonResult,但我会在将Json发送的Action方法中使用JsonResult。需要考虑两种方法。 - burnt1ce
2
但是为什么一个AJAX请求想要整个页面呢?它会收到太多的信息,doctype、head、body等等。难道不应该只是想要一块数据吗?您是否考虑使用Request.IsAjaxRequest()来处理这两种情况的一个操作? - Matt Greer

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接