#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. Просмотрите этот КБ для получения информации, чтобы узнать, применимо ли это и как это обойти.