Сбой проверки viewstate MAC. — Не на веб-ферме, происходит при нажатии кнопки

#c# #asp.net

#c# #asp.net

Вопрос:

Я видел, что этот вопрос часто задавали, но ни один из вопросов или ответов, которые я видел, похоже, не решает мою проблему. Как следует из названия, я получаю ошибку always fun Validation of Viewstate.

Веб-сайт моей компании размещен на Amazon EC2, поэтому, насколько мне известно, это не веб-ферма, поскольку это единственная страница, на которой возникает проблема.

У нас есть простая страница отзывов, которая отлично отображается, и все элементы на странице отлично работают, включая оставление новых отзывов. Однако кнопка «проверка флага» генерирует ошибку viewstate при нажатии.

Фактический код, который запускается при нажатии кнопки, выглядит следующим образом:

 protected void btnFlagReview_Click(object sender, EventArgs e)
{
    try
    {
        LinkButton btn = (LinkButton)sender;
        int id = Int32.Parse(btn.Attributes["rid"]);
        testimonials.updateModerated(false, id);

        MailMessage mail = new MailMessage();
        mail.To.Add("oursupport@emailaddress.com");
        mail.From = new MailAddress("ourwebmaster@emailaddress.com");
        mail.Subject = "A review has been flagged for moderation";
        string Body =
            "A user review has been flagged for moderation. Please Approve/Delete this review in the Admin Panel. ";
        mail.Body = Body;
        SmtpClient smtp = new SmtpClient();
        try
        {
            smtp.Send(mail);
        }
        catch (SmtpException ex)
        {
            if (ex.StatusCode == SmtpStatusCode.InsufficientStorage)
                smtp.Send(mail);//Send again to ensure this email gets sent 
        }

        string script = "<SCRIPT type='text/javascript'>alert('This review has been flagged for moderation.')</SCRIPT>";
        Type t = typeof(String);
        ClientScript.RegisterStartupScript(t, "Script", script);
    }
    catch(Exception ee) {
        businessName.Text = ee.ToString();
    }
}
  

Код фактической кнопки выглядит следующим образом:

 <asp:LinkButton ID="btnFlagReview" OnClick="btnFlagReview_Click" rid='<%# Eval("testimonialID") %>' runat="server">flag</asp:LinkButton>
  

Я даже попробовал решение, которое я нашел в других вопросах по всему Интернету и здесь, например, изменение ValidateRequest страницы, EnableEventValidation и viewStateEncryptionMode, просто чтобы посмотреть, будут ли они работать.

Я в растерянности, учитывая, что действие проверки флага настолько простое по сравнению со многими другими вещами, которые мы делаем. Буду признателен за любую помощь.

Комментарии:

1. Какая версия фреймворка? Вокруг этого было несколько исправлений: blogs.msdn.com/b/tom/archive/2008/03/14 /…

2. (Коллега с другой информацией): URL этой страницы записывается в iis на страницу, которая обрабатывает перенаправление. Domain.com/dan/reviews -> domain.com/profile.aspx?user=danamp;page=reviews (логика c #, server.transfer) -> domain.com/reviews.aspx?user=dan

3. @Майкл Джаспер: смотрите обновление ниже

4. У нас установлена версия 4.0.30319.

Ответ №1:

Однажды у меня была похожая проблема, и это закончилось тем, что у меня был атрибут action в моем теге form. Проверьте, есть ли у вас такое, и если да, удалите его.

Комментарии:

1. Вы, вероятно, сэкономили мне тысячу часов … даже спустя 3 года .. 🙂

Ответ №2:

В своем комментарии я спросил, какую версию фреймворка вы используете. Причина в том, что было сделано несколько исправлений для устранения этой проблемы.

Смотрите http://blogs.msdn.com/b/tom/archive/2008/03/14/validation-of-viewstate-mac-failed-error.aspx

Многие из них, похоже, сводятся к тому, что кто-то нажимает кнопку или ссылку на странице, которая не полностью отображается обратно в браузере. Что кажется вероятным в вашей ситуации для ссылки с названием «флаг»…

Первое, что нужно попробовать, это применить все обновления Windows. После этого вам, возможно, придется сделать что-то вроде размещения ключа компьютера в файле web.config или создать базовый класс страницы, который выдает соответствующие скрытые поля в верхней части формы, а не в конце.

===== ОБНОВЛЕНИЕ на основе комментариев к вопросу =====

Смотрите: http://support.microsoft.com/kb/316920 /

Возможно, проблема вызвана самим server.transfer. Просмотрите этот КБ для получения информации, чтобы узнать, применимо ли это и как это обойти.