ASP.NET MVC OutputCache with POST Controller Actions

Posted by Maxim Z. on Stack Overflow See other posts from Stack Overflow or by Maxim Z.
Published on 2010-05-30T02:02:34Z Indexed on 2010/05/30 2:12 UTC
Read the original article Hit count: 462

Filed under:
|
|
|
|

I'm fairly new to using the OutputCache attribute in ASP.NET MVC.


Static Pages

I've enabled it on static pages on my site with code such as the following:

[OutputCache(Duration = 7200, VaryByParam = "None")]
public class HomeController : Controller
{
    public ActionResult Index()
    {
        //...

If I understand correctly, I made the whole controller cache for 7200 seconds (2 hours).


Dynamic Pages

However, how does it work with dynamic pages? By dynamic, I mean where the user has to submit a form.

As an example, I have a page with an email form. Here's what that code looks like:

public class ContactController : Controller
{
    //
    // GET: /Contact/

    public ActionResult Index()
    {
        return RedirectToAction("SubmitEmail");
    }

    public ActionResult SubmitEmail()
    {
        //In view for CAPTCHA: <%= Html.GenerateCaptcha() %>
        return View();
    }

    [CaptchaValidator]
    [AcceptVerbs(HttpVerbs.Post)]
    public ActionResult SubmitEmail(FormCollection formValues, bool captchaValid)
    {
        //Validate form fields, send email if everything's good...

            if (isError)
            {
                return View();
            }
            else
            {
                return RedirectToAction("Index", "Home");
            }

    }

    public void SendEmail(string title, string name, string email, string message)
    {
        //Send an email...

    }
}

What would happen if I applied OutputCache to the whole controller here?

Would the HTTP POST form submission work? Also, my form has a CAPTCHA; would that change anything in the equation?

In other words, what's the best way to approach caching with dynamic pages?

Thanks in advance.

© Stack Overflow or respective owner

Related posts about c#

Related posts about ASP.NET