Как обновить jQuery DropdownChecklist со стороны сервера?

Я работаю над веб-страницей ASP.Net, которая будет использовать выпадающий контрольный список jQuery ( http://code.google.com/p/dropdown-check-list/ ). У меня нет опыта работы с JavaScript и я совершенно новичок в jQuery.

В основном, мой вопрос: Как обновить выбранные элементы в jQuery DropdownChecklist на стороне сервера?


ПРИМЕЧАНИЕ: Чтобы получить подробные сведения о решении, прокрутите вопрос до конца.


Вот некоторые сведения, которые помогут вам лучше понять, что я делаю ...

У меня есть jQuery DropdownChecklist, который заполняется, когда страница нагрузки. Когда пользователь выбирает элемент в DropdownChecklist, выбранные значения собираются и сохраняются в скрытом поле ввода, затем выполняется обратная передача, которая позволяет серверу обновлять серверный элемент управления. Эта часть работает.

Теперь вот моя проблема. Этот серверный элемент управления, который фактически является пользовательским элементом управления, имеет кнопку «Удалить» для каждого выбранного элемента в DropdownChecklist. При нажатии кнопки «Удалить» соответствующий элемент в jQuery DropdownChecklist должен быть отменен. Так что пока я не понял, как это сделать.

Вот несколько подходящих фрагментов кода:

Вот разметка ...


Вот код JavaScript ...

function DoPostback() {
 __doPostBack('UP1', '');
};

$(function () {
 $("#s1").dropdownchecklist({ forceMultiple: true, width: 200,  textFormatFunction: function() {
        return "Filters:";
        }
 });

 $('#s1').change(function () {
  var values = $(this).val();
  document.getElementById("inpHide").value = values;
  DoPostback();
 });
});

Вот разметка usercontrol ...

<%@ Control Language="vb" AutoEventWireup="false" CodeBehind="SelectedFilterBox.ascx.vb"
    Inherits="SelectedFilterBox.SelectedFilterBox" %>

<%# Eval("filterName")%>

Вот некоторые важные части кода программной части ...

Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load

   If Not IsPostBack Then
      'populate dropdown checklist
      s1.Items.Add("Filter A")
      s1.Items.Add("Filter B")
      s1.Items.Add("Filter C")
   Else
      'update filters based on contents of hidden input field
      UpdateFilters(inpHide.Value)
   End If

End Sub

Private Sub UpdateFilters(ByVal filters As String)
   Dim Filter() As String = Split(filters, ",")
   Dim Index As Integer = 0

   'clear existing filters
   sfbFilters.Clear()

   'loop through adding filters based on supplied string
   For Each str As String In Filter
      sfbFilters.Add(str, Index.ToString())
      Index += 1
   Next str
End Sub

'this event occurs when a Remove button is clicked
Protected Sub sfbFilters_FilterChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles sfbFilters.FilterChanged
   'update hidden input field
   inpHide.Value = UpdateHiddenField()

   'update label, listing (filter, value) pairs
   UpdateFilterValueSets()
End Sub

Вот функция JavaScript, которая делает то, что я хочу ...

function DeselectFilter(targetString){
  $("#s1 option").each(function(){
      if($(this).text() === targetString) $(this).attr("selected", "");
  });
  $("#s1").dropdownchecklist("refresh");
};

Однако я не уверен, что ' m вызывая его прямо из события onClientClick. Это выглядит правильно?


После нескольких комментариев, вот решение, которое сработало ...


   

Мы определили, что самым простым решением было вызвать функцию JavaScript со стороны клиента, а не пытаться делать это со стороны сервера. ImageButton имеет событие onClientClick, но по какой-то причине это не сработало. Однако обертывание ImageButton в теге привязки на стороне клиента и использование его события onclick дало эффект.

Спасибо, Coding Gorilla , за вашу помощь.

6
задан Community 23 May 2017 в 11:58
поделиться