Добавление пользовательских проверок в элементы управления ASP.NET - PullRequest
0 голосов
/ 15 апреля 2010

Мы пытаемся создать простой элемент управления asp для некоторых клиентов, где они могут просто вставить один блок -

т.е.

<captcha:CaptchaControl ID="CaptchaControl1" 
runat="server"
Server="http://localhost:51947/"
/>

и пусть он отдает управление. Уловка в том, что я не могу включить это в пользовательскую проверку. Прямо сейчас я использую функцию RenderContents, чтобы отобразить макет самого элемента управления, а также подключить его к Javascript. Проблема в том, что я не знаю, как заставить пользовательскую проверку срабатывать при использовании в качестве элемента управления.

protected override void RenderContents(HtmlTextWriter output)
{

output.Write(@"
<script type=""text/javascript"" src=""http://ajax.googleapis.com/ajax/libs/jquery/1.3/jquery.min.js""></script>   
<link rel=""stylesheet"" type=""text/css"" href=""/Layout/CaptchaLayout.css"" />
//etc
<asp:Textbox id=""text1"" runat=""server"" text=""""></asp:Textbox>
<asp:CustomValidator id=""CustomValidator2"" runat=""server"" 
   ControlToValidate = ""text1""
   ErrorMessage = ""You must enter at least 8 characters!""
   ClientValidationFunction=""validateLength"" >
</asp:CustomValidator>"

            );

    }

Какие-нибудь предложения для лучшего способа сделать это?

Ответы [ 2 ]

0 голосов
/ 15 апреля 2010

Ваш CustomValidator не работает, потому что ASP.NET не знает, что он там. Вы просто выводите этот вывод в ответ ... ASP.NET не интерпретирует его.

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

0 голосов
/ 15 апреля 2010

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

Почему бы вам просто не унаследовать свойпользовательский элемент управления Panel, а затем в обработчики событий Init или Load добавить к нему текстовое поле и пользовательский валидатор?Примерно:

public class MyControl : Panel
{
   public MyControl()
   {
   }

   protected override void OnInit(EventArgs e)
   {
    ScriptManager.RegisterScript( ... Google script, CSS, etc. ... );


    TextBox txt = new TextBox();
    txt.ID = "text1";
    this.Controls.Add(txt);

    CustomValidator vld = new CustomValidator();
    vld.ControlToValidatre = "text1";
    vld.ID = "validator1";
    this.Controls.Add(vld);
   }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...