8

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

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

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

更新

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

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

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

4

3 回答 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 类。

于 2011-01-03T15:34:38.670 回答
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);
    }
于 2011-01-03T15:37:08.700 回答
1

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

于 2011-01-03T15:37:50.213 回答