Я создал пользовательский элемент управления (из 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.
Я попытался предложение Криса использования пользовательских валидатор, и он, похоже, имеет ту же проблему, что и BaseValidator. Функция проверки клиента никогда не вызывается. Я продлил Custom Validator и дал ему ClientValidationFunction = "", но все равно ничего. Есть еще предложения? – 2009-02-27 14:09:13
К человеку, который спрашивает: «Вы поняли это?» ... Короткий ответ, нет, не может понять, почему это не работает. Вместо этого я создал комплимент на стороне клиента для решения на стороне сервера, предоставленного .NET (2.0). Поскольку это были только определенные контрольные трипсы, которые не сработали, я создал валидаторы с интерфейсом к «стороне клиента», который ждет нажатия кнопки и по щелчку, запускает скрипты, предоставленные настраиваемыми валидаторами, которые я создал. Если что-то не удается, оно останавливает отправку формы и отображает эрос. Внизу стороны мои валидаторы начинают сначала, затем, как только они исправляются, все остальное. – 2009-05-14 13:14:12