2009-02-25 3 views
0

Я создал пользовательский элемент управления (из System.Web.UI.UserControl) и создал свой собственный валидатор для пользовательского элемента управления (из System.Web. UI.WebControls.BaseValidator). Все работает нормально, пока я не попытаюсь заставить элемент управления пользователя выполнять проверку на стороне клиента.Созданный пользователем Validator wont call Проверка на стороне клиента Javascript на «сложном» пользовательском управлении

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

Некоторые дополнительные сведения:

Составной элемент управления является выпадающий список и «погрузчиком образ», как это Аякса включен выпадающего списка (с помощью 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() работают нормально.

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

Noel.

+0

Я попытался предложение Криса использования пользовательских валидатор, и он, похоже, имеет ту же проблему, что и BaseValidator. Функция проверки клиента никогда не вызывается. Я продлил Custom Validator и дал ему ClientValidationFunction = "", но все равно ничего. Есть еще предложения? – 2009-02-27 14:09:13

+0

К человеку, который спрашивает: «Вы поняли это?» ... Короткий ответ, нет, не может понять, почему это не работает. Вместо этого я создал комплимент на стороне клиента для решения на стороне сервера, предоставленного .NET (2.0). Поскольку это были только определенные контрольные трипсы, которые не сработали, я создал валидаторы с интерфейсом к «стороне клиента», который ждет нажатия кнопки и по щелчку, запускает скрипты, предоставленные настраиваемыми валидаторами, которые я создал. Если что-то не удается, оно останавливает отправку формы и отображает эрос. Внизу стороны мои валидаторы начинают сначала, затем, как только они исправляются, все остальное. – 2009-05-14 13:14:12

ответ

0

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

http://msdn.microsoft.com/en-us/library/9eee01cx(VS.71).aspx

и установить ClientValidationFunction, чтобы обеспечить ваш JS называется:

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

+0

Возможно, мне придётся использовать CustomValidator для работы javascript, но это не так много, как расширение BaseValidator. :( – 2009-02-25 16:17:19

+0

Это должно быть - пользовательский валидатор расширяет базовый валидатор, поэтому вы не должны терять там никакой функциональности. Была ли какая-то конкретная область, о которой вы беспокоились? – Chris

+0

ну и пользовательский валидатор (v) потребовал бы добавления к нему функций чтобы работать, поэтому, если я расширяю базу [v], я пишу функцию один раз, а затем просто включаю всю необходимую мне информацию.Пользовательский [v] должен быть помещен в пользовательский элемент управления для повторного использования, что является дополнительной головной болью. – 2009-02-25 17:21:34