开发者

Asp.Net WriteSubsitution vs PartialView - the right way

开发者 https://www.devze.com 2022-12-12 14:44 出处:网络
I have a partial view that should not be cached in a output cached MVC view. Usually you write non-cached content by using Response.WriteSubstitution.

I have a partial view that should not be cached in a output cached MVC view. Usually you write non-cached content by using Response.WriteSubstitution. The problem is that WriteSubstitution takes as a parameter a HttpResponseSubstitutionCallback callback which looks like this:

public delegate string HttpResponseSubstitutionCallback(System.Web.HttpContext context)

This is where things get complicated since there is no easy/fun way to generate the htm开发者_运维知识库l on the fly. You have to do a hack like this.

So the question is: Is there an easier way to make a partial view not cached ?


See Phil Haack's article on donut caching in MVC. Phil takes advantage of the existing API to create a new HtmlHelper method to provide a callback that can render the non-cached code. His supplies an anonymous method to the helper to specify the callback. To get this to work unchanged, you'll still need to have a method that renders a partial view to a string, though I think it would be easier to do in an HtmlHelper -- just look at the source for RenderPartial and RenderPartialInternal and see what changes would be needed to write it to a MemoryStream instead of the Response -- I believe it would be the same code except you'd supply your stream instead of the Response output stream, then convert your stream to a string.

It might look like this:

<%= Html.Substitute( cb => Html.RenderToString( "Partial" ) ) %>

Phil indicates that it might make it in to ASP.NET MVC 1.0, but I think it's only available in the MvcFutures assembly.


In MVC2 we can use Html.Action to easily obtain the substituted html. Yeeeeiii
But Response.WriteSubstitotion is not working anymore. Aaaahhhh

0

精彩评论

暂无评论...
验证码 换一张
取 消