Эквивалент Response.Clear() в MVC

Я очень новичок в MVC. Как мне выполнить Response.Clear() из страницы MVC3 aspx?

Я пытался:

Response.Clear();

ViewContext.HttpContext.Response.Clear();

Похоже, что ни один из них не функционирует вообще, поскольку любой HTML-контент до операторов остается в выводе. Единственное, что, кажется, работает Response.Close(), но, конечно, это не позволяет мне выводить что-либо потом.

Причина, по которой нужно просто выполнить тестирование / отладку, - я просто хочу иметь возможность очистить буферизованный вывод из встроенного кода на странице aspx, а затем вывести что-то еще. Подобно тому, что можно сделать с веб-формами.

Обратите внимание, я не хочу выполнять это в контроллере, так как это означает перекомпиляцию каждый раз, когда я делаю изменения, а также потерю состояния сеанса. Смысл этого в том, чтобы возиться на странице aspx, чтобы избежать повторной компиляции каждый раз.

3 ответа

Исходя из вашего комментария, вы хотите возиться с вашим кодом до того, как будет выполнено действие, и после этого наиболее идеальным решением является использование пользовательских ActionFilters:

public interface IActionFilter
{
    void OnActionExecuting(ActionExecutingContext filterContext);
    void OnActionExecuted(ActionExecutedContext filterContext);
}

OnActionExecuting используется для выполнения кода перед вызовом действия Controller, в то время как OnActionExecuted используется после того, как метод действия выполнил свою работу.

Таким образом, вы подключаете пользовательский фильтр следующим образом:

public class MyCustomFilter : IActionFilter
{
   public override void OnActionExecuting(ActionExecutingContext filterContext)
   {
       //put your custom response and shenanigans here
       ...
       return;
   }
}

После этого вы можете украсить свой метод контроллера с помощью этого фильтра:

[MyCustomFilter]
public ActionResult ListSomething()
{
   /* magic happens here */
}

Здесь вы можете многого достичь, но я предлагаю кое-что почитать:

Примечание: если это просто для целей обучения и отладки, я бы взглянул на более новые версии mvc (4, 5).

Вместо того, чтобы сосредоточиться на ResponseВозможно, вам следует сосредоточиться на том, что вы хотите вернуть в методе контроллера.

Если вы хотите вернуть полную визуализацию View

return View("myView");

Если вы хотите вернуть PartialView

return PartialView("myPartialView");

Если вы хотите вернуть FileStream

return File(myBytes, "filename.ext");

Если вы хотите вернуть Json строка,

return Json(myObject);

Пытаться

ViewContext.HttpContext.Response.Flush();

Стоит из:

ViewContext.HttpContext.Response.Clear();
Другие вопросы по тегам