Странная ошибка ASP.net - PullRequest
       4

Странная ошибка ASP.net

1 голос
/ 31 августа 2010

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

Ошибка сервера в приложении "/ ********".Проверка 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>

Ответы [ 2 ]

2 голосов
/ 31 августа 2010

Что вам нужно сделать, это добавить MachineKey в ваш web.config, вы можете использовать этот инструмент для генерации ключей

http://aspnetresources.com/tools/machineKey

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

Образец

<system.web> 
  <machineKey validationKey="abc" decryptionKey="xyz" validation="SHA1" decryption="AES" />
</system.web>
0 голосов
/ 31 августа 2010

Нашел эту ссылку, которая описывает вашу проблему. Там сказано обновить .NET.

http://blogs.msdn.com/b/tom/archive/2008/03/14/validation-of-viewstate-mac-failed-error.aspx

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...