Все формы работают на моем сайте, кроме этой, когда я отправляю эту форму, я получаю следующую ошибку:
Ошибка сервера в приложении "/ ********".Проверка MAC представления состояния не удалась.Если это приложение размещено на веб-ферме или в кластере, убедитесь, что в конфигурации указан одинаковый ключ validationKey и алгоритм проверки.Автогенерация не может использоваться в кластере.Описание: во время выполнения текущего веб-запроса произошло необработанное исключение.Пожалуйста, просмотрите трассировку стека для получения дополнительной информации об ошибке и о том, где она возникла в коде.
Сведения об исключении: System.Web.HttpException: Ошибка проверки MAC-адреса состояния представления.Если это приложение размещено на веб-ферме или в кластере, убедитесь, что в конфигурации указан одинаковый ключ validationKey и алгоритм проверки.AutoGenerate нельзя использовать в кластере.
Ошибка источника:
[Нет соответствующих строк исходного текста]
Исходный файл: c: \ WINDOWS \ Microsoft.NET \ Framework \ v2.0.50727 \ Временные файлы ASP.NET \ alphapack \ b9be7787 \ 4e4ee265 \ App_Web_al4orjqe.6.cs Строка: 0
Трассировка стека:
[HttpException (0x80004005): невозможно проверить данные.]
System.Web.Configuration.MachineKeySection.GetDecodedData (Byte [] buf, модификатор Byte [], запуск Int32, длина Int32, Int32 & dataLength) +289 System.Web.UI.ObjectStateFormatter.Deserialize (String inputString) + 140
[ViewStateException: неверное состояние просмотра.IP-адрес клиента: 10.10.0.103 Порт: 2332 Пользователь-агент: Mozilla / 5.0 (Windows; U; Windows NT 5.1; en-GB; rv: 1.9.2.8) Gecko / 20100722 Firefox / 3.6.8 (.NET CLR 3.5.30729) ViewState: /...]
[HttpException (0x80004005): Проверка MAC состояния просмотра завершилась неудачно.Если это приложение размещено на веб-ферме или в кластере, убедитесь, что в конфигурации указан одинаковый ключ validationKey и алгоритм проверки.Автогенерацию нельзя использовать в кластере.]
System.Web.UI.ViewStateException.ThrowError (Исключение внутреннее, String persistedState, String errorPageMessage, Boolean macValidationError) + 106
System.Web.UI.ViewStateException.ThrowMacValidrr (inner, String persistedState) + 14
System.Web.UI.ObjectStateFormatter.Deserialize (String inputString) + 242
System.Web.UI.ObjectStateFormatter.System.Web.UI.IStateFormatter.Deserialize (String serializedState) +4
System.Web.ua.Web.UI.Page.LoadAllState () +43 System.Web.
System.Web.UI.Page.ProcessRequest () +80 System.Web.UI.Page.ProcessRequestWithNoAssert (HttpContextконтекст) + 21
System.Web.UI.Page.ProcessRequest (контекст HttpContext) + 49
ASP.admin_productcats_aspx.ProcessRequest (контекст HttpContext) в каталоге c: \ WINDOWS \ Microsoft.NET \ Framework \ v2.0.50727 \Временные файлы ASP.NET \ alphapack \ b9be7787 \ 4e4ee265 \ App_Web_al4orjqe.6.cs: 0 System.Web.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute () +181 System.Web.выполняется синхронно) + 75
Код:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Data;
using System.Data.SqlClient;
using System.Configuration;
using System.Collections;
namespace ********
{
public partial class productAdd : System.Web.UI.Page
{
// Navigation stuff
Category tree = null;
Dictionary<int, Category> dict = new Dictionary<int, Category>();
ArrayList dicIndexes = new ArrayList();
// Validate stock count
protected void validateStockCount(object source, ServerValidateEventArgs args)
{
try
{
int theCount = Convert.ToInt32(stockCount.Text);
if (theCount < 0)
{
args.IsValid = false;
}
else
{
args.IsValid = true ;
}
}
catch
{
args.IsValid = false ;
}
}
protected void Page_Load(object sender, EventArgs e)
{
limitedStock.Attributes.Add("onclick", "showHide()");
// Action of the page
string pageAction = Request.QueryString["action"];
using (SqlConnection cn = new SqlConnection(ConfigurationManager.ConnectionStrings["LocalSqlServer"].ToString()))
{
cn.Open();
// Posted a form to self
if (IsPostBack)
{
// Validate data
Page.Validate();
if (Page.IsValid)
{
// New category
if (pageAction == "new")
{
// Get form vals
int selectedCatID = int.Parse(parent.SelectedItem.Value.ToString());
string prodName = productName.Text;
bool isLim = limitedStock.Checked;
//int prodStockCount = int.Parse(stockCount.ToString());
int prodStockCount = 3;
bool isForSale = !hidden.Checked;
using (SqlCommand cmd = new SqlCommand("INSERT INTO tblProducts (productName, isForSale, categoryID, isLimitedStock, stockCount, description, weightKG, basePrice, dateCreated) VALUES (@p_name, " + isForSale + ", " + selectedCatID + ", " + isLim + ", " + prodStockCount + ", '', 0, 0, getDate())", cn))
{
cmd.Parameters.Add("@p_name", SqlDbType.VarChar, 255).Value = prodName;
cmd.ExecuteNonQuery();
}
}
}
}
else
{
// Load the menu structure
tree = navigation.loadMenuData(cn, tree, dict, dicIndexes);
tree.loadToListBox(dict, dicIndexes, parent);
}
}
}
}
}
Моя страница aspx:
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="productAdd.aspx.cs" Inherits="********.productAdd"
title="Add a Product"
MasterPageFile="../MasterPages/AdminMaster.master"
%>
<asp:content id="Content2" contentplaceholderid="headContent" runat="server">
<SCRIPT LANGUAGE="JavaScript">
function IsNumeric(input) {
return !isNaN(parseInt(input));
}
function validateStock(oSrc, args) {
// Required
if (document.getElementById("<%=limitedStock.ClientID %>").checked == false) {
args.IsValid = true;
}
// Check if numeric
else if (IsNumeric(args.Value) == true) {
args.IsValid = !(parseInt(args.Value) < 0);
} else {
args.IsValid = false;
}
}
function showHide() {
var stockTable = document.getElementById("stockOnOff");
if (document.getElementById("<%=limitedStock.ClientID %>").checked) {
stockTable.style.display = "block";
} else {
stockTable.style.display = "none";
}
}
</SCRIPT>
</asp:content>
<asp:content id="Content1" contentplaceholderid="mainContent" runat="server">
<form runat="server" action="productCats.aspx?action=new&mid=2">
<div class="subHead">Basic Details</div>
<table class="settingTable">
<tr>
<td colspan="2"><b>Product Name</b></td>
</tr>
<tr>
<td>
<asp:TextBox ID="productName" runat="server" CssClass="tbox"></asp:TextBox>
<asp:RequiredFieldValidator runat="server"
id="ValidatorName"
ControlToValidate="productName"
ErrorMessage="You need to enter a product name"
display="Dynamic" />
</td>
</tr>
<tr>
<td colspan="2"><b>Category</b></td>
</tr>
<tr>
<td>
<asp:ListBox SelectionMode="Single" Rows="8" id="parent" runat="server" CssClass="tbox widebox">
<asp:ListItem Selected="True" Text="Top Level" Value="0"></asp:ListItem>
</asp:ListBox>
<asp:RequiredFieldValidator runat="server"
id="RequiredFieldValidator1"
ControlToValidate="parent"
ErrorMessage="You need to select a parent"
display="Dynamic" />
</td>
</tr>
</table>
<div class="subHead">Stock Options</div>
<table class="settingTable">
<tr>
<td colspan="2"><b>Limited Stock</b></td>
</tr>
<tr>
<td width="50" align="center"><asp:CheckBox ID="limitedStock" runat="server" /></td>
<td>If checked this product will have a limited stock</td>
</tr>
</table>
<table class="settingTable" id="stockOnOff" style="display:none;">
<tr>
<td colspan="2"><b>Stock Count</b></td>
</tr>
<tr>
<td>
<asp:TextBox ID="stockCount" runat="server" CssClass="tbox smallBox"></asp:TextBox>
<asp:CustomValidator id="stockValidator" runat=server
ControlToValidate = "stockCount"
ErrorMessage = "Enter a value of at least 0"
ValidateEmptyText="true"
ClientValidationFunction="validateStock" >
</asp:CustomValidator>
</td>
</tr>
</table>
<div class="subHead">Other</div>
<table class="settingTable">
<tr>
<td colspan="2"><b>Hide</b></td>
</tr>
<tr>
<td width="50" align="center"><asp:CheckBox ID="hidden" runat="server" /></td>
<td>If checked, the product will be hidden for visitors</td>
</tr>
</table>
<asp:Button id="id" text="Add Product" runat="server" />
</form>
</asp:content>