ASP.NET VB.NET — Winforms to Web — реализация эквивалента управления списком LostFocus для Интернета

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

Проблема:

  • Когда пользователь выбирает lbCarrier(s), Bundles не отображаются в списке, потому что функция lossfocus не работает для asp.net. Какой код я могу использовать для автоматического заполнения списка Bundles на основе того, что выбрано в списке lbCarrier для ASP.NET.

скриншот веб-приложения

Код из default.aspx.vb:

Private Sub lbCarriers_LostFocus(ByVal sender As Object, ByVal e As System.EventArgs) Handles lbCarriers.LostFocus
    Dim splt() As String
    Dim ac1 As Array
    bundles.Items.Clear()
    For Each item In lbCarriers.Items

        splt = Split(item.text, "|")
        ac1 = proxy.GetContractingBundles("test", "test", Trim(splt(0)))
        For Each Pitem In ac1
            bundles.Items.Add(Trim(splt(2)) & " | " & Pitem.FormBundleName)
        Next
    Next
End Sub

Protected Sub lbCarriers_SelectedIndexChanged(ByVal sender As Object, ByVal e As EventArgs) Handles lbCarriers.SelectedIndexChanged

End Sub

person Brian McCarthy    schedule 11.04.2011    source источник


Ответы (3)


Вам нужно будет выполнить javascript на стороне клиента или добавить AutoPostBack в раскрывающийся список и закодировать событие OnSelectedIndexChanged:

<asp:DropDownList AutoPostBack="true" OnSelectedIndexChanged="MethodName" ...

Кроме того, событие LostFocus срабатывает только на клиенте, а не на сервере, и это событие Javascript под названием «Размытие»:

http://www.java2s.com/Code/JavaScriptReference/Javascript-Methods/blur.htm

person camainc    schedule 11.04.2011
comment
Спасибо за ваш ответ! Я получил список пакетов для заполнения с автопостбэком, установленным на true, но список пакетов заполняется, как только вы нажимаете на lbcarrier, и он не позволяет вам выполнять множественный выбор. Есть ли у вас какие-либо идеи о том, как разрешить множественный выбор с включенной функцией обратной передачи? - person Brian McCarthy; 12.04.2011
comment
Я заметил, что вы разместили еще один вопрос по этому поводу - вы получили нужный ответ? По сути, вы не можете использовать и AutoPostBack, и множественный выбор в одном и том же списке. Вам нужно будет использовать что-то вроде jQuery и Ajax на клиенте (мой предпочтительный метод) или дождаться, пока пользователь нажмет кнопку отправки, обработает свой выбор, а затем опубликует результаты. - person camainc; 13.04.2011

Я бы посоветовал вам изучить использование jQuery. Это значительно упрощает программирование на стороне клиента. Что вам нужно сделать, это сделать асинхронный AJAX запрос к серверу, когда фокус потерян, затем попросите сервер вернуть только те данные, которые вы хотите отобразить в списке.

Это должно быть внизу главной страницы:

<script type="text/javascript">
$(document).ready(function() {
    $("#lbCarrier").onblur(function () {
        // Ask the server for the list
        $.ajax({
           type: "POST",
           url: "getlist.aspx",
           data: "option=" + $("#lbCarrier").val(),
           success: function(result) {
               // When you get the result, populate the Bundles list
               $("#lbBundles").......
           }
         });
    });
});
</script>

Вам потребуется создать вторую страницу (getlist.aspx), которая принимает аргумент строки запроса «Option», который возвращает пакеты для выбранного оператора.

person James Allen    schedule 11.04.2011
comment
Спасибо за ваш ответ. После части $(#lbBundles)....... я должен просто поместить весь код из механизма: Private Sub lbCarriers_LostFocus? какой синтаксис для этого? - person Brian McCarthy; 12.04.2011
comment
Не совсем, код LostFocus нужно разместить на странице getlist.aspx. Эта страница не является настоящей страницей, она просто предоставляет данные для помещения в список. Я бы поместил код в событие Page_Load и вызвал Response.Write(...) и Response.End(), когда вы закончите. Что касается того, как вы обрабатываете его обратно на клиенте, зависит от того, какой формат вы решите использовать для списка (разделенная запятыми/обозначение объекта javascript (JSON)). - person James Allen; 12.04.2011
comment
Если вы хотите использовать JQuery Ajax, вам потребуется веб-метод на сервере для вызова. Этот метод вернет объекты JSON, которые вы можете проанализировать и добавить в DOM. Вот основная статья для начала: encosia.com/2008/03/27/ Вы также можете Google Asp.Net WebForms JQuery Ajax - person camainc; 13.04.2011

Я получил список пакетов для заполнения с автопостбэком, установленным на true, но список пакетов заполняется, как только вы нажимаете на lbcarrier, и это не позволяет вам выбирать более одного оператора.

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

код на default.aspx:

            <asp:ListBox AutoPostback="true" ID="lbCarriers" runat="server" Height="86px" Width="250px">
            </asp:ListBox>

код на default.aspx.vb:

Protected Sub lbCarriers_SelectedIndexChanged(ByVal sender As Object, ByVal e As EventArgs) Handles lbCarriers.SelectedIndexChanged

    Dim splt() As String
    Dim ac1 As Array
    bundles.Items.Clear()
    Dim item As ListItem = lbCarriers.SelectedItem
    splt = item.ToString().Split("|")
    ac1 = proxy.GetContractingBundles("test", "test", Trim(splt(0)))
    For Each Pitem In ac1
        bundles.Items.Add(Trim(splt(2)) & " | " & Pitem.FormBundleName)
    Next
End Sub
person Brian McCarthy    schedule 12.04.2011