ASP.NET MVC: как преобразовать ActionResult в строку?

Я хотел бы взять существующий метод действия, преобразовать его возвращаемое значение в строку и отправить его как JSON для ответа на запрос AJAX.

Для этого мне нужно преобразовать ActionResult в строку. Как мне это сделать?

У нас есть противоположное, где мы можем преобразовать строку в ActionResult, используя this.Content().

Обновить

Существующий и первый метод действия возвращает тип ActionResult, но на самом деле он возвращает ViewResult для ответа на почтовый запрос HTTP. У меня есть второй метод действия (мой фасад), который возвращает JsonResult, который отвечает на запросы AJAX. Я хочу, чтобы этот 2-й метод действия использовал 1-й метод действия для рендеринга HTML.

По большому счету, я хочу, чтобы ActionResult (сгенерированный из метода действия) можно было получить не только с помощью стандартного HTTP-сообщения, но и с помощью запроса AJAX с помощью фасадного метода действия (второй метод действия). Таким образом, у меня, как у разработчика, есть выбор между использованием HTTP Post или AJAX для получения рендеринга страницы.

Извините, я постарался сделать это обновление как можно короче. Спасибо.


person burnt1ce    schedule 03.01.2011    source источник
comment
Конечно, ContentResult или JsonResult это то, что вам нужно.   -  person Dan Atkinson    schedule 03.01.2011


Ответы (3)


Вы ищете номер 4 или 6 ниже?

Текст извлечен из здесь:

Понимание результатов действий

Действие контроллера возвращает то, что называется результатом действия. Результат действия — это то, что действие контроллера возвращает в ответ на запрос браузера.

Платформа ASP.NET MVC поддерживает несколько типов результатов действий, в том числе:

  1. ViewResult — представляет HTML и разметку.
  2. EmptyResult — не представляет результата.
  3. RedirectResult — представляет перенаправление на новый URL-адрес.
  4. JsonResult — представляет результат нотации объектов JavaScript, который можно использовать в приложении AJAX.
  5. JavaScriptResult — представляет сценарий JavaScript.
  6. ContentResult — представляет текстовый результат.
  7. FileContentResult — представляет загружаемый файл (с двоичным содержимым).
  8. FilePathResult — представляет загружаемый файл (с путем).
  9. FileStreamResult — представляет загружаемый файл (с файловым потоком).

Все эти результаты действий наследуются от базового класса ActionResult.

person Leniel Maccaferri    schedule 03.01.2011
comment
№6 - это то, что я искал. Спасибо! +1 - person Adam Levitt; 20.03.2013

Верните его как 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);
    }
person Andiih    schedule 03.01.2011
comment
JsonResult, вероятно, даже лучший выбор. - person Matt Greer; 03.01.2011
comment
Я думаю, вы, вероятно, правы... Я могу еще раз взглянуть на свой код :-) - person Andiih; 03.01.2011

Вы уверены, что JsonResult не то, что вам нужно? Если вы вызовете метод Json(object jsonObject), определенный в Controller, он сериализует jsonObject в JSON и вернет соответствующий ответ (со всеми правильно установленными заголовками и все такое). Как правило, запросы JSON должны быть POST, но вы также можете настроить их для разрешения GET.

person Matt Greer    schedule 03.01.2011
comment
Существующий метод действия возвращает ActionResult, но на самом деле он возвращает ViewResult. Я не могу вернуть JsonResult для существующего метода Action, но я бы использовал JsonResult для метода Action, который отправит Json. Есть два метода, которые следует учитывать. - person burnt1ce; 03.01.2011
comment
Но почему AJAX-запросу нужна вся страница? Он получил бы слишком много информации, тип документа, заголовок, тело и т. д. Разве запрос AJAX не хотел бы просто кусок данных? Рассматривали ли вы возможность использования Request.IsAjaxRequest(), чтобы одно действие обрабатывало оба сценария? - person Matt Greer; 03.01.2011