我对MVC很新。如何在MVC3 aspx页面中执行Response.Clear()
?
我试过了:
Response.Clear();
ViewContext.HttpContext.Response.Clear();
它们似乎都不起作用,因为语句之前的任何HTML内容都保留在输出中。似乎唯一有效的是Response.Close()
,但当然不允许我在之后输出任何内容。
希望这只是一个测试/调试练习的原因 - 我只是希望能够从aspx页面中的内联代码中清除缓冲输出,然后输出其他内容。与网络表单相似。
注意,我不想在控制器中执行此操作,因为这意味着每次进行更改时重新编译,以及丢失会话状态。关键是要在aspx页面中进行操作以避免每次重新编译。
答案 0 :(得分:1)
从您的评论中得出,您希望在执行Action之前弄乱您的代码,之后,最理想的解决方案是使用自定义ActionFilters:
public interface IActionFilter
{
void OnActionExecuting(ActionExecutingContext filterContext);
void OnActionExecuted(ActionExecutedContext filterContext);
}
OnActionExecuting
用于在调用Controller操作之前执行代码,而在action方法完成其工作后使用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)。
答案 1 :(得分:0)
除了专注于Response
之外,您可能应该专注于您希望在控制器方法中返回的内容。
如果您希望返回完整呈现的View
return View("myView");
如果您想返回PartialView
return PartialView("myPartialView");
如果您想返回FileStream
return File(myBytes, "filename.ext");
如果您想返回Json
字符串,
return Json(myObject);
答案 2 :(得分:0)
尝试
ViewContext.HttpContext.Response.Flush();
而不是:
ViewContext.HttpContext.Response.Clear();