Созданный пользователем валидатор не будет вызывать Javascript проверки на стороне клиента для "сложного" пользовательского элемента управления

StackOverflow https://stackoverflow.com/questions/586229

Вопрос

Я создал пользовательский элемент управления (из System.Web.UI.UserControl) и создал свой собственный валидатор для пользовательского элемента управления (из System.Web.UI.WebControls.Базовый валидатор).Все работает нормально, пока я не попытаюсь заставить пользовательский элемент управления выполнить проверку на стороне клиента.

Пытаясь отладить эту проблему, я установил 'Control для проверки' в текстовое поле вместо пользовательского пользовательского элемента управления, и скрипт на стороне клиента работает нормально!Мне кажется, что у него проблема с моим составным пользовательским элементом управления, который я создал.Кто-нибудь сталкивался с этой проблемой раньше?Кто-нибудь еще видел сбой проверки на стороне клиента в пользовательских пользовательских элементах управления?

Немного дополнительной информации :

Составной элемент управления представляет собой выпадающий список и "изображение загрузчика", поскольку это выпадающий список с поддержкой ajax (с использованием ICallbackEventHandler).Я знаю, что на страницу записывается javascript на стороне клиента, и поместил предупреждение ('случайное сообщение') в качестве первой строки в функции проверки, которая появляется только в том случае, если она проверяет текстовое поле (т.Е.не тогда, когда он проверяет мой пользовательский элемент управления)

Язык :C # (ASP.NET 2.0) и jQuery 1.2.6

в файле aspx :

<rms:UserDDL ID="ddlUserTypes" runat="server" PreLoad="true" />
<rms:DDLValidator 
        ID="userTypesVal"
        ControlToValidate="ddlUserTypes"
        ErrorMessage="You have not selected a UserType"
        runat="server"
        Text="You have not selected a UserType"
        Display="Dynamic"
        EnableClientScript="true" />

в коде валидатора за

protected string ScriptBlock
        {
            get
            {
                string nl = System.Environment.NewLine;
                return
                    "<script type=\"text/javascript\">" + nl +
                    "   function " + ScriptBlockFunctionName + "(ctrl)" + nl +
                    "   {" + nl +
                    "       alert('Random message'); " + nl +
                    "       var selVal = $('#' + ctrl.controltovalidate).val(); " + nl +

                    "       alert(selVal);" + nl +
                    "      if (selVal === '-1') return false;  " + nl +
                    "      return false;  " + nl +
                    "   }" + nl +
                    "</script>";
            }
        }

    protected override void OnPreRender(EventArgs e)
    {
        if (this.DetermineRenderUplevel() && this.EnableClientScript)
        {
            Page.ClientScript.RegisterExpandoAttribute(this.ClientID, "evaluationfunction", this.ScriptBlockFunctionName);
            Page.ClientScript.RegisterClientScriptBlock(GetType(), this.ScriptBlockKey, this.ScriptBlock);
        }

        base.OnPreRender(e);
    }

Я знаю, что мои ControlPropertiesValid() и EvaluateIsValid() работают нормально.

Я ценю любую помощь по этому вопросу.

Ноэль.

Нет правильного решения

Другие советы

Попробуйте использовать CustomValidator вместо BaseValidator:

http://msdn.microsoft.com/en-us/library/9eee01cx (ПРОТИВ 71).aspx

И установите clientvalidationфункцию, чтобы убедиться, что ваш JS вызван:

http://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.customvalidator.clientvalidationfunction.aspx

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top