Отключение элементов управления вызывает странную ошибку - PullRequest
0 голосов
/ 23 ноября 2011

Я пытаюсь отключить элементы управления на странице ASP.NET во время обработки. С этой целью я принял решение из здесь , запустив дерево DOM и отключив все дочерние элементы управления. Это прекрасно работает для многих частей экрана, которые я пытаюсь отключить, но попытка отключить некоторые таблицы, заполненные элементами управления, приводит к следующей ошибке: -

Server Error in '/' Application.
--------------------------------------------------------------------------------

Input string was not in a correct format. 
Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code. 

Exception Details: System.FormatException: Input string was not in a correct format.

Source Error: 

An unhandled exception was generated during the execution of the current web request. Information regarding the origin and location of the exception can be identified using the exception stack trace below.  

Stack Trace: 

[FormatException: Input string was not in a correct format.]
   System.Number.StringToNumber(String str, NumberStyles options, NumberBuffer& number, NumberFormatInfo info, Boolean parseDecimal) +7471479
   System.Number.ParseDouble(String value, NumberStyles options, NumberFormatInfo numfmt) +115
   System.Double.Parse(String s, NumberStyles style, NumberFormatInfo info) +192
   System.Double.Parse(String s, IFormatProvider provider) +25
   ComponentArt.Web.UI.NumberInput.set_Value(Nullable`1 value) +81
   ComponentArt.Web.UI.NumberInput.LoadViewState(Object savedState) +255
   System.Web.UI.Control.LoadViewStateRecursive(Object savedState) +183
   System.Web.UI.Control.LoadChildViewStateByIndex(ArrayList childState) +134
   System.Web.UI.Control.LoadViewStateRecursive(Object savedState) +221
   System.Web.UI.Control.LoadChildViewStateByIndex(ArrayList childState) +134
   System.Web.UI.Control.LoadViewStateRecursive(Object savedState) +221
   System.Web.UI.Control.LoadChildViewStateByIndex(ArrayList childState) +134
   System.Web.UI.Control.LoadViewStateRecursive(Object savedState) +221
   System.Web.UI.Control.LoadChildViewStateByIndex(ArrayList childState) +134
   System.Web.UI.Control.LoadViewStateRecursive(Object savedState) +221
   System.Web.UI.Control.LoadChildViewStateByIndex(ArrayList childState) +134
   System.Web.UI.Control.LoadViewStateRecursive(Object savedState) +221
   System.Web.UI.Page.LoadAllState() +312
   System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +1661




--------------------------------------------------------------------------------
Version Information: Microsoft .NET Framework Version:2.0.50727.3625; ASP.NET Version:2.0.50727.3618 

Ничего из этого нет в коде приложения, поэтому я не знаю, что с этим делать. Кто-нибудь знает, как найти причину проблемы или где мне начать искать?

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

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

РЕДАКТИРОВАТЬ: по запросу, вот Javascript, который предназначен для отключения элементов управления:

    function disableChildElements(objId) 
    { 
        var theObject = document.getElementById(objId); 
        var level = 0; 
        TraverseDOM(theObject, level, disableElement); 
    } 

    function TraverseDOM(obj, lvl, actionFunc) 
    {  
        for (var i=0; i<obj.childNodes.length; i++)
        { 
            var childObj = obj.childNodes[i]; 

            if (childObj.tagName)
            { 
                    actionFunc(childObj); 
            } 

            TraverseDOM(childObj, lvl + 1, actionFunc); 
        } 

    } 

    function disableElement(obj) 
    { 
        obj.disabled = true; 
    } 

    function DisableControls()
    {
        disableChildElements(castVariablesTable.id);
        disableChildElements(oldGradeTable.id);
        oldGradePanel.enabled=false;
    }

Первая строка функции DisableControls работает нормально; вторая вызывает ошибку. Замена второй строки третьей строкой, чтобы попробовать альтернативный метод, ничего не делает.

Таблица приведенных переменных в ASP начинается следующим образом ...

<table id="castVariablesTable" class="normalTable">
    <tr>
        <td>
            <label class="normalText">Number of strands</label>
        </td>
        <td>
            <span class="normalInput">
                <MixedZone:NumberInput runat="server"
                                       ID="niNumberOfStrands" 
                                       MaxLength="1"
                                       Step="1"
                                       Increment="1"
                                       MaxValue="6"
                                       MinValue="1"
                                       NumberType="Number"
                                       DecimalDigits="0">
                </MixedZone:NumberInput>
            </span>

и т. Д.

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

1 Ответ

0 голосов
/ 24 ноября 2011

После гораздо большего расследования я обнаружил, что если кто-то пытается использовать Javascript для отключения элемента управления ComponentArt:NumberInput, для которого не определено значение, эта ошибка устраняется.

Установка значений для всех элементов управления ComponentArt:NumberInput на странице перед публикацией устраняет ошибку.

...