<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://weblogs.asp.net/utility/FeedStylesheets/rss.xsl" media="screen"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/"><channel><title>Andrew Rea : ASP.NET MVC</title><link>http://weblogs.asp.net/andrewrea/archive/tags/ASP.NET+MVC/default.aspx</link><description>Tags: ASP.NET MVC</description><dc:language>en</dc:language><generator>CommunityServer 2007 SP1 (Build: 20510.895)</generator><item><title>Creating an Extended Content Result for ASP.NET MVC</title><link>http://weblogs.asp.net/andrewrea/archive/2009/12/14/creating-an-extended-content-result-for-asp-net-mvc.aspx</link><pubDate>Mon, 14 Dec 2009 00:11:51 GMT</pubDate><guid isPermaLink="false">c06e2b9d-981a-45b4-a55f-ab0d8bbfdc1c:7278037</guid><dc:creator>REA_ANDREW</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://weblogs.asp.net/andrewrea/rsscomments.aspx?PostID=7278037</wfw:commentRss><comments>http://weblogs.asp.net/andrewrea/archive/2009/12/14/creating-an-extended-content-result-for-asp-net-mvc.aspx#comments</comments><description>&lt;p&gt;I had a requirement on a small home project I am working on, where I need to add some more information to a content result than was there.&amp;#160; More specifically I had to add the status code and also have access to the response header collection.&amp;#160; I did come across an interesting thing with this, where by accessing and adding to the response header collection in a certain way will actually raise an exception and inform you that this is only support when IIS Integrated Pipeline is enabled.&amp;#160; I did some looking about and found a post by Phil Haack showing how he had achieved what I was looking for when he made the Download result class.&amp;#160; &lt;/p&gt;  &lt;p&gt;So the following causes an exception:&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;div class="wlWriterEditableSmartContent" id="scid:812469c5-0cb0-4c63-8c15-c81123a09de7:f2f2c7bb-c66c-41e3-98ac-6ceb4ed8461b" style="padding-right: 0px; display: inline; padding-left: 0px; float: none; padding-bottom: 0px; margin: 0px; padding-top: 0px"&gt;&lt;pre name="code" class="c#"&gt;public override void ExecuteResult(ControllerContext context)
        {
            context.HttpContext.Response.StatusCode = (int)StatusCode;
            foreach (string s in Headers.Keys)
            {
                context.HttpContext.Response.Headers.Add(s,Headers[s]);
            }
            base.ExecuteResult(context);
        }&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;&lt;/p&gt;

&lt;p&gt;And the following works fine, notice the subtle difference in how the header is added now:&lt;/p&gt;

&lt;div class="wlWriterEditableSmartContent" id="scid:812469c5-0cb0-4c63-8c15-c81123a09de7:fed58937-b6e1-4d1c-a62e-56f9ff8efbcf" style="padding-right: 0px; display: inline; padding-left: 0px; float: none; padding-bottom: 0px; margin: 0px; padding-top: 0px"&gt;&lt;pre name="code" class="c#"&gt;        public override void ExecuteResult(ControllerContext context)
        {
            context.HttpContext.Response.StatusCode = (int)StatusCode;
            foreach (string s in Headers.Keys)
            {
                context.HttpContext.Response.AddHeader(s,Headers[s]);
            }
            base.ExecuteResult(context);
        }&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;So the full code implementation of the result is below.&amp;#160; &lt;/p&gt;

&lt;div class="wlWriterEditableSmartContent" id="scid:812469c5-0cb0-4c63-8c15-c81123a09de7:dc0a4cc8-72ed-47a2-b9c1-2567a74f262c" style="padding-right: 0px; display: inline; padding-left: 0px; float: none; padding-bottom: 0px; margin: 0px; padding-top: 0px"&gt;&lt;pre name="code" class="c#"&gt; public class ExtendedContentResult : ContentResult
    {
        public NameValueCollection Headers { get; set; }
        public HttpStatusCode StatusCode { get; set; }

        public ExtendedContentResult()
        {
            Headers = new NameValueCollection();
        }

        public override void ExecuteResult(ControllerContext context)
        {
            context.HttpContext.Response.StatusCode = (int)StatusCode;
            foreach (string s in Headers.Keys)
            {
                context.HttpContext.Response.AddHeader(s,Headers[s]);
            }
            base.ExecuteResult(context);
        }
    }&lt;/pre&gt;&lt;/div&gt;&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=7278037" width="1" height="1"&gt;</description><category domain="http://weblogs.asp.net/andrewrea/archive/tags/C_2300_/default.aspx">C#</category><category domain="http://weblogs.asp.net/andrewrea/archive/tags/.NET+3.5/default.aspx">.NET 3.5</category><category domain="http://weblogs.asp.net/andrewrea/archive/tags/ASP.NET+MVC/default.aspx">ASP.NET MVC</category></item><item><title>ASP.NET MVC "Pager" HTML Helper</title><link>http://weblogs.asp.net/andrewrea/archive/2008/07/01/asp-net-mvc-quot-pager-quot-html-helper.aspx</link><pubDate>Tue, 01 Jul 2008 15:26:38 GMT</pubDate><guid isPermaLink="false">c06e2b9d-981a-45b4-a55f-ab0d8bbfdc1c:6345698</guid><dc:creator>REA_ANDREW</dc:creator><slash:comments>7</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://weblogs.asp.net/andrewrea/rsscomments.aspx?PostID=6345698</wfw:commentRss><comments>http://weblogs.asp.net/andrewrea/archive/2008/07/01/asp-net-mvc-quot-pager-quot-html-helper.aspx#comments</comments><description>&lt;p&gt;So I am building my own custom blog using the ASP.NET MVC Framework, and I have been working on the paging aspect.&amp;#160; I will be going into more detail how i achieved this but for now, I am publishing a HtmlHelper I have made which has helped me, believe it or not lol, in the paging.&amp;#160; The way I have designed it also is kind of decoupled, so i see no reason for its integration into many other applications.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;My implmentation of the HtmlHelper is here:&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;pre&gt;&amp;lt;%= Html.Pager((pc.StartingIndex / pc.PageSize) ,pc.PageSize,pc.TotalRecords,&amp;quot;&lt;span style="color: #8b0000"&gt;/Home/Page&lt;/span&gt;&amp;quot;) %&amp;gt;&lt;/pre&gt;

&lt;p&gt;&amp;#160;&lt;/p&gt;

&lt;p&gt;&lt;a href="http://weblogs.asp.net/blogs/andrewrea/WindowsLiveWriter/ASP.NETMVCPagerHTMLHelper_E742/Pager_2.png"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" border="0" alt="Pager" src="http://weblogs.asp.net/blogs/andrewrea/WindowsLiveWriter/ASP.NETMVCPagerHTMLHelper_E742/Pager_thumb.png" width="572" height="118" /&gt;&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;And the code which makes it is here.&amp;#160; The major thing is calculating the seed of the iteration based on the current page, after that you are laughing!&lt;/p&gt;

&lt;p&gt;&amp;#160;&lt;/p&gt;

&lt;pre&gt;    &lt;span style="color: #0000ff"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff"&gt;static&lt;/span&gt; &lt;span style="color: #0000ff"&gt;string&lt;/span&gt; Pager(&lt;span style="color: #0000ff"&gt;this&lt;/span&gt; HtmlHelper helper, &lt;span style="color: #0000ff"&gt;int&lt;/span&gt; currentPage, &lt;span style="color: #0000ff"&gt;int&lt;/span&gt; currentPageSize, &lt;span style="color: #0000ff"&gt;int&lt;/span&gt; totalRecords, &lt;span style="color: #0000ff"&gt;string&lt;/span&gt; urlPrefix)
    {
        StringBuilder sb1 = &lt;span style="color: #0000ff"&gt;new&lt;/span&gt; StringBuilder();

        &lt;span style="color: #0000ff"&gt;int&lt;/span&gt; seed = currentPage % currentPageSize == 0 ? currentPage : currentPage - (currentPage % currentPageSize);

        &lt;span style="color: #0000ff"&gt;if&lt;/span&gt;(currentPage &amp;gt; 0)
            sb1.AppendLine(String.Format(&amp;quot;&lt;span style="color: #8b0000"&gt;&amp;lt;a href=\&amp;quot;{0}/{1}\&amp;quot;&amp;gt;Previous&amp;lt;/a&amp;gt;&lt;/span&gt;&amp;quot;, urlPrefix, currentPage));

        &lt;span style="color: #0000ff"&gt;if&lt;/span&gt;(currentPage - currentPageSize &amp;gt;= 0)
            sb1.AppendLine(String.Format(&amp;quot;&lt;span style="color: #8b0000"&gt;&amp;lt;a href=\&amp;quot;{0}/{1}\&amp;quot;&amp;gt;...&amp;lt;/a&amp;gt;&lt;/span&gt;&amp;quot;, urlPrefix, (currentPage - currentPageSize) + 1));

        &lt;span style="color: #0000ff"&gt;for&lt;/span&gt; (&lt;span style="color: #0000ff"&gt;int&lt;/span&gt; i = seed; i &amp;lt; Math.Round((totalRecords / 10) + 0.5) &amp;amp;&amp;amp; i &amp;lt; seed + currentPageSize; i++)
        {
            sb1.AppendLine(String.Format(&amp;quot;&lt;span style="color: #8b0000"&gt;&amp;lt;a href=\&amp;quot;{0}/{1}\&amp;quot;&amp;gt;{1}&amp;lt;/a&amp;gt;&lt;/span&gt;&amp;quot;, urlPrefix, i + 1));
        }

        &lt;span style="color: #0000ff"&gt;if&lt;/span&gt; (currentPage + currentPageSize &amp;lt;= (Math.Round((totalRecords / 10) + 0.5) - 1))
            sb1.AppendLine(String.Format(&amp;quot;&lt;span style="color: #8b0000"&gt;&amp;lt;a href=\&amp;quot;{0}/{1}\&amp;quot;&amp;gt;...&amp;lt;/a&amp;gt;&lt;/span&gt;&amp;quot;, urlPrefix, (currentPage + currentPageSize) + 1));

        &lt;span style="color: #0000ff"&gt;if&lt;/span&gt; (currentPage &amp;lt; (Math.Round((totalRecords / 10) + 0.5) - 1))
            sb1.AppendLine(String.Format(&amp;quot;&lt;span style="color: #8b0000"&gt;&amp;lt;a href=\&amp;quot;{0}/{1}\&amp;quot;&amp;gt;Next&amp;lt;/a&amp;gt;&lt;/span&gt;&amp;quot;, urlPrefix, currentPage + 2));

        &lt;span style="color: #0000ff"&gt;return&lt;/span&gt; sb1.ToString();
    }&lt;/pre&gt;

&lt;p&gt;Hope this helps some people,&lt;/p&gt;

&lt;p&gt;&amp;#160;&lt;/p&gt;

&lt;p&gt;Cheers,&lt;/p&gt;

&lt;p&gt;&amp;#160;&lt;/p&gt;

&lt;p&gt;Andrew :-)&lt;/p&gt;&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=6345698" width="1" height="1"&gt;</description><category domain="http://weblogs.asp.net/andrewrea/archive/tags/C_2300_/default.aspx">C#</category><category domain="http://weblogs.asp.net/andrewrea/archive/tags/Custom+Controls/default.aspx">Custom Controls</category><category domain="http://weblogs.asp.net/andrewrea/archive/tags/.NET+3.5/default.aspx">.NET 3.5</category><category domain="http://weblogs.asp.net/andrewrea/archive/tags/Extension+Methods/default.aspx">Extension Methods</category><category domain="http://weblogs.asp.net/andrewrea/archive/tags/ASP.NET+MVC/default.aspx">ASP.NET MVC</category></item><item><title>A Simple MVC Preview 3 Contact Form, Custom HtmlHelper and Model Example</title><link>http://weblogs.asp.net/andrewrea/archive/2008/06/05/a-simple-mvc-preview-3-contact-form-custom-htmlhelper-and-model-example.aspx</link><pubDate>Thu, 05 Jun 2008 08:32:03 GMT</pubDate><guid isPermaLink="false">c06e2b9d-981a-45b4-a55f-ab0d8bbfdc1c:6249373</guid><dc:creator>REA_ANDREW</dc:creator><slash:comments>11</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://weblogs.asp.net/andrewrea/rsscomments.aspx?PostID=6249373</wfw:commentRss><comments>http://weblogs.asp.net/andrewrea/archive/2008/06/05/a-simple-mvc-preview-3-contact-form-custom-htmlhelper-and-model-example.aspx#comments</comments><description>I have just recently designed a site for a client and decided to use MVC for it.&amp;#160; I think above all the best thing I enjoy about it, is the clean markup that is outputted.&amp;#160; Of course I also have great administration for the work and effort that...(&lt;a href="http://weblogs.asp.net/andrewrea/archive/2008/06/05/a-simple-mvc-preview-3-contact-form-custom-htmlhelper-and-model-example.aspx"&gt;read more&lt;/a&gt;)&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=6249373" width="1" height="1"&gt;</description><category domain="http://weblogs.asp.net/andrewrea/archive/tags/HTML/default.aspx">HTML</category><category domain="http://weblogs.asp.net/andrewrea/archive/tags/C_2300_/default.aspx">C#</category><category domain="http://weblogs.asp.net/andrewrea/archive/tags/.NET+3.5/default.aspx">.NET 3.5</category><category domain="http://weblogs.asp.net/andrewrea/archive/tags/Extension+Methods/default.aspx">Extension Methods</category><category domain="http://weblogs.asp.net/andrewrea/archive/tags/ASP.NET+MVC/default.aspx">ASP.NET MVC</category></item></channel></rss>