2011-02-11 4 views
2

Я подозреваю, что мой вопрос вращается вокруг плохого понимания того, как пользовательские обработчики событий работают в ASP.NET. Я прочитал несколько статей, но целевые аудитории пытались что-то отличное от того, что я есть.Принудительно обработчик события для пользовательского контроля при каждой обратной передаче

Я создал UserControl, который динамически помещается на мою страницу во время события Init. Он заполняет и отлично работает, но я остаюсь почесываю голову, как извлекать данные из него во время обратной передачи.

Это эффективно комбобокс multipick, который полностью обрабатывается с использованием клиентского JavaScript (я использую jQuery в большой степени). Внутри элемента контейнера управления я создаю пустой элемент DIV, содержащий все выбранные элементы. Когда пользователь выбирает элементы, я генерирую DIV в этом контейнере DIV, который включает некоторую разметку. Интерес для меня на стороне сервера - это содержимое пары полей INPUT.

После выбора пункта, тонированное HTML выглядит примерно так:

<div class="multiPickContainer"> 
    <div class="multiPickItem"> 
    <input type="text" /> 
    <input type="hidden" /> 
    </div> 
</div> 

Проблема, конечно, является то, что эти выбранные элементы были созданы на стороне клиента и сервера не имеют каких-либо знаний их (например, нет runat = "server" - это чистый HTML).

В любом сообщении [назад], я хотел бы, чтобы обработчик события запускал мой пользовательский элемент управления, который позволяет мне проверить, какие элементы находятся в этом контейнере DIV. Я хотел бы, чтобы это событие срабатывало независимо от того, сделал ли пользователь какие-либо выборы (возможно, элемент управления был предварительно заполнен, и в этом случае мне все равно хотелось бы знать, какие в нем есть).

То, что я после того, как что-то вроде этого:

private GenerateControl(TemplateControl page){ 
    var control = page.LoadControl("~/MyControl.ascx") as MyControl; 
    control.OnPostBack += HandlePostback; 
} 

Может быть, я полностью покинуть трек, и это может быть на самом деле невозможно (или глупая идея). Единственная альтернатива, о которой я могу думать, - это исправить фактические элементы управления ASP.NET и подключить встроенные обработчики событий.

Может ли кто-нибудь сделать какие-либо предложения или указать мне какую-либо хорошую литературу, в которой обсуждается создание настраиваемых обработчиков событий?

ответ

2

Если вы даете inputs атрибут имени, значения будут отображаться в Request.Form

+0

Спасибо, Yads, что это очень полезно и хорошо работает. У меня есть остающаяся проблема, которая гарантирует, что обработчик события (в котором я получаю значения из Request.Form) срабатывает все время. Я использую сторонние элементы управления, поэтому захватили события TextChanged и SelectedIndexChanged, но это уродливо, потому что некоторые случаи использования запускают несколько событий (и один не запускается вообще). Это несколько не связано с вашим ответом, но связывает вещи для меня. Могу ли я каким-то образом заставить обработчик события всегда вызывать вызываемый при публикации формы? –

+0

@Stefan, не можете ли вы просто вызвать обработчик событий на 'Page_Load'? – Vadim

+0

, к сожалению, нет, потому что все элементы управления моей страницей динамически генерируются (в событии Init), поэтому вручную вызов обработчика событий сделает это для нового экземпляра элемента управления. Тем не менее, я смог обойти это, добавив в мой контроль HiddenField с обработчиком событий ValueChanged. В ходе взаимодействия HiddenField становится «затронутым» клиентом JavaScript, и это надежно запускает мой обработчик событий. Спасибо за ваше понимание - все работает сейчас! –

Смежные вопросы