Эквивалент 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 */
}
Здесь вы можете многого достичь, но я предлагаю кое-что почитать:
- http://www.dotnet-tricks.com/Tutorial/mvc/b11a280114-Understanding-ASP.NET-MVC-Filters-and-Attributes.html
- http://msdn.microsoft.com/en-us/magazine/gg232768.aspx
- http://www.asp.net/mvc/tutorials/older-versions/controllers-and-routing/understanding-action-filters-cs
- http://msdn.microsoft.com/en-us/library/gg416513(vs.98).aspx
Примечание: если это просто для целей обучения и отладки, я бы взглянул на более новые версии 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();