#asp.net-3.5
#asp.net-3.5
Вопрос:
Я нашел потерянные сообщения для устранения этой ошибки: «Проверка viewstate MAC не удалась». Я читал, что это ASP.NET ошибка 2.0, которая также является ошибкой. Но я использую VS 2008 с ASP.NET 3.5 SP1. Почему эта ошибка появляется и в этой версии?
Я использую элементы управления текстовым полем ASP. В некоторых сообщениях упоминалось, что текстовые поля ASP генерируют эту ошибку, поэтому я установил для AutoPostBack каждого текстового поля значение False.
Как избавиться от этого беспорядка?
Код добавлен ниже **
* Default.aspx *
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="FlexStock._Default" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
<!--<%@ Register Assembly="MSCaptcha" Namespace="MSCaptcha" TagPrefix="cc1" %>-->
<link rel="Stylesheet" type="text/css" href="~/Styles/main.css" />
<title>FlexStock@.NET - Gamma Edition</title>
</head>
<body id="LoginPageBody" class="loginPageBodyClass">
<img id="imgProductLogo" src="Styles/stockist_gamma.png" style="text-align:center;text-shadow:black;margin-left:500px" alt="Product Logo"/>
<form id="loginForm" runat="server" class="loginForm" action="./Forms/selectCompany.aspx" >
<div id="divMainLoginPage" runat="server">
<div class="label">
<asp:Label ID="lblUserName" runat="server" CssClass="LabelControls" AssociatedControlID="txtUserName">User Name: </asp:Label>
</div>
<div class="value">
<asp:TextBox ID="txtUserName" runat="server" CssClass="TxtStyle" Width="199px" AutoPostBack="false"></asp:TextBox>
</div>
<div class="label">
<asp:Label ID="lblPassword" runat="server" CssClass="LabelControls" AssociatedControlID="txtPassword">Password: </asp:Label>
</div>
<div class="value">
<asp:TextBox ID="txtPassword" runat="server" CssClass="TxtStyle" TextMode="Password" Width="199px" AutoPostBack="false"></asp:TextBox>
</div>
<div class="label">
<asp:Label ID="lblCaptcha" runat="server" Text="Security Check"></asp:Label>
</div>
<div class="value">
<!-- <cc1:CaptchaControl ID="ccJoin" runat="server" CaptchaBackgroundNoise="none" CaptchaLength="5" CaptchaHeight="60" CaptchaWidth="200" CaptchaLineNoise="None" CaptchaMinTimeout="5" CaptchaMaxTimeout="240" /> -->
</div>
<div class="label">
<asp:Label ID="lblEnterCaptcha" runat="server" Text="Enter Value"></asp:Label>
</div>
<div class="value">
<asp:TextBox ID="txtCaptcha" runat="server" CssClass="TxtStyle" Width="199px" AutoPostBack="false"></asp:TextBox><br /><br />
<asp:Button ID="btnLogin" runat="server" Width="60" Text="Login" CssClass="BtnStyle"/>
</div>
</div>
</form>
<img id="img1" src="Styles/impact_logo.png" style="text-align:right;text-shadow:black;margin-left:800px" />
</body>
</html>
Выберите Company.aspx **
<%@ Page Title="" Language="C#" MasterPageFile="~/master1.Master" AutoEventWireup="true" CodeBehind="~/Forms/selectCompany.aspx.cs" Inherits="FlexStock.Forms.selectCompany" EnableViewStateMac="false" %>
<asp:Content ID="Content1" ContentPlaceHolderID="head" runat="server">
<link rel="Stylesheet" type="text/css" href="../Styles/selectCompany.css" />
<link rel="Stylesheet" type="text/css" href="../Styles/main.css" />
</asp:Content>
<asp:Content ID="Content2" ContentPlaceHolderID="ContentPlaceHolder1" runat="server">
<form id="frmSelectCompany" enableviewstate="false">
<div id="label" class="label" style="width:300px">
<asp:Label ID="lblSelectCompany" runat="server" Text="Select Company or Create New"></asp:Label>
</div>
<div id="btnCreate" style="text-align:right">
<asp:Button ID="btnCreateNew" runat="server" Text="Create New" CssClass="BtnStyle" />
</div><br />
<div id="divGrid">
</div>
</form>
</asp:Content>
Ответ №1:
Это довольно распространенная ошибка, которую можно увидеть. Это функция безопасности в ASP.NET это не позволяет кому-либо вводить дополнительные элементы управления на страницу после ее рендеринга и отправлять эти элементы управления обратно на сервер. Это затрудняет взлом вашего веб-сайта.
Создаете ли вы какие-либо элементы управления вводом с помощью javascript? Если это так, не делайте этого. Создайте элементы управления обычным образом внутри веб-формы и оберните их в <div style='display:none;'>
и отобразите их, когда они вам понадобятся.
Вы создаете какие-либо элементы управления динамически в C #? — Если это так, вы должны создать их внутри, Page_Init
а не Page_Load
в противном случае ASP.NET не распознает их как действительные.
Вы можете отключить эту меру безопасности, установив EnableViewStateMac=False
в верхней части страницы aspx, но я настоятельно не советую этого делать.
Комментарии:
1. У меня есть элемент управления Captcha в Default.aspx. Когда я нажимаю кнопку входа в эту форму, она выдает ошибку при открытии другой формы.
2. @RPK Трудно сказать, не видя кода. Если вы создаете тестовую страницу только с капчей и кнопкой, выполняется ли обратная отправка без ошибок?
3. Я полностью отключил Captcha, но все равно получил ошибку. Когда я добавил EnableViewStateMac = False, это сработало. Но вы говорите, что это не рекомендуется. Чем что? Вставляю код в свою операционную систему.
4. @RPK Проблема в том, что вы публикуете в selectCompany.aspx со страницы default.aspx. Обычно ASP.NET страницы должны отправлять сообщения обратно самим себе, что объясняет ошибку. Удалите
action
из формы. Создайте обработчик кнопки, чтобы перехватить событие btnLogin_Click, поместите здесь свой код проверки входа в систему и выполните ‘Ответ. Перенаправление («SelectCompany.aspx»)», если вход в систему прошел успешно.