开发者

Custom 404 page and Invalid Viewstate errors

As you all know it seems like ASP.NET applications is always throwing some Invalid Viewstate errors but now i actually find a way to reproduce one at my site.

What is happening is that a user is trying to access a page that doesn't exist and i do a:

    if (CurrentItem == null) {
        throw new HttpException(404, "Page not found");
    }

This will redirect the user to our custom 404 page. This 404 page is just a regular page in our system that we redirect to via web.config. The search functionality is visible on this page. But when i do a postback from this page the error seems to happen. So if you go to for example.

http://alternativeto.net/software/doesntexist

And then use the search form in the upper right corner and type for example Dropbox, hit enter (if you get a auto-suggestion don't click that cause it will just link you to that app) and baam, you ge开发者_开发知识库t an error that is "Invalid Viewstate" bla bla.

Anyone know how i can fix this? Is it beacuse how i throw the 404 error? I can imagine it has something todo with the redirect to the custom 404 page and the viewstate and asp.net magic is in some invalid state in some way? Maybe i can change something in my web.config to correct this?

Thanks for any help i can get! Want to get rid of as many errors as possible of course :)

UPDATE

Seems like i solved it myself. When MS had that security bug they recommended to change the error redirect to redirectMode="ResponseRewrite" when i changed it to redirectMode="ResponseRedirect" it seems to work fine!

UPDATE 2

But i also realize that i rather want to have the ResponseRewrite solution since it will stay on that URL that got the error and that is much more cleaner. So i would still be happy to find a solution that works with ResponseRewrite.


A search box should ALWAYS use GET, never POST (!!). So don't use postback for searching, decorate your textbox with a form method="get" action="searchpage" and you are home free, and all your visitors will be happier


I had the same issue, I believe it's because using responseMode="ExecuteURL within <httpErrors> uses Server.Transfer which is why the url will not change from e.g. /contact to /404.

This means the action on the main form will remain as /contact and will postback to that page but since we've transfered to /404.aspx it will throw invalid viewstate.

My solution was to set the form action on prerender of the 404 & 500 pages to the path of the request instead of the RawUrl.

protected void Page_PreRender(object sender, EventArgs e)
{
    var form = (HtmlForm)this.Master.FindControl("Form1");
    if (form != null)
        form.Action = Request.Path;
}

Even though this question is pretty old, I had to post this as it might save someone a few hours of headache in the future.

0

上一篇:

下一篇:

精彩评论

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

最新问答

问答排行榜