在MVC中的Response.Clear()等效

时间:2014-08-01 08:43:30

标签: asp.net-mvc-3 httpresponse

我对MVC很新。如何在MVC3 aspx页面中执行Response.Clear()

我试过了:

Response.Clear();

ViewContext.HttpContext.Response.Clear();

它们似乎都不起作用,因为语句之前的任何HTML内容都保留在输出中。似乎唯一有效的是Response.Close(),但当然不允许我在之后输出任何内容。

希望这只是一个测试/调试练习的原因 - 我只是希望能够从aspx页面中的内联代码中清除缓冲输出,然后输出其他内容。与网络表单相似。

注意,我不想在控制器中执行此操作,因为这意味着每次进行更改时重新编译,以及丢失会话状态。关键是要在aspx页面中进行操作以避免每次重新编译。

3 个答案:

答案 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();