Я создал пользовательский элемент управления (из System.Web.UI.UserControl) и создал свой собственный валидатор для пользовательского элемента управления (из System.Web.UI.WebControls.BaseValidator). Все работает нормально, пока я не попытаюсь заставить пользовательский элемент управления выполнить проверку на стороне клиента.
При попытке отладки этой проблемы я установил «Контроль для проверки» в текстовое поле вместо пользовательского пользовательского элемента управления, и скрипт на стороне клиента работает отлично! Мне кажется, что у меня есть проблема с моим составным пользовательским элементом управления, который я создал. Кто-нибудь сталкивался с этой проблемой раньше? Кто-нибудь еще видел сбой проверки на стороне клиента на пользовательских элементах управления?
Дополнительная информация:
Составной элемент управления - это раскрывающийся список и «образ загрузчика», так как это раскрывающийся список с поддержкой 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 () работают нормально.
Я ценю любую помощь по этому вопросу.
Noel.