簡體   English   中英

回發后訪問控制的動態數據

[英]Access control's dynamic data after postback

所以我有一個級聯的下拉列表,但是使用列表框。 在第一個ListBox中選擇一個項目時,第二個ListBox將根據第一個選擇填充項目(這是使用jQuery AJAX調用完成的)。 這是我得到的:

$('#<%= lbEvents.ClientID %>').change(function() {
    var selectedValues = $('#<%= lbEvents.ClientID %>').val();
    var json = '{ events: [' + selectedValues.join(',') + '] }';

    $.ajax({
        type: "POST",
        url: 'Default.aspx/PopulateAttendees',
        data: json,
        contentType: "application/json; charset=utf-8",
        dataType: "json",
        success: OnAttendeesPopulated
    });
});



function OnAttendeesPopulated(response) {
    var attendees = response.d;
    var attendeesList = $("#<%= lbAttendees.ClientID %>");

    attendeesList.children().remove();

    $.each(attendees, function() {
        attendeesList.append($("<option></option>").val(this['Value']).html(this['Text']));
    });
}


//Populated on PageLoad
<asp:ListBox ID="lbEvents" runat="server" SelectionMode="Multiple" />

<asp:ListBox ID="lbAttendees" runat="server" SelectionMode="Multiple" />

<asp:Button ID="btnSubmit" runat="server" Text="Submit" OnClick="btnSubmit_Click" />

首先,由於lbAttendees是動態加載的,因此我在按鈕的click事件上遇到了錯誤,因此我必須將EnableEventValidation設置為false。

我現在沒有收到錯誤,但是在按鈕的click事件中,我只能訪問lbEvents中的數據,而不能訪問lbAttendees; lbAttendees在click事件中為空。 我假設我需要將lbAttendees中的數據存儲在ViewState中。

如何將lbAttendees中的數據存儲在ViewState中,以便可以在click事件中訪問它?

您真的不能做到這一點(至少不容易做到)。 這里的問題是ajax和asp.net表單不能真正很好地混合在一起。 在我看來,您有兩種選擇:

  • 使用JavaScript進入第二個列表框,然后將AJAX與某些api(REST?)結合使用,以在單擊項目時保存它們。 (基本上使第二個列表框100%啟用AJAX。)這是一個很難的解決方案-您必須處理許多UI事件和用例,但如果能正常工作就非常酷。

  • 添加一些JavaScript,該JavaScript在單擊按鈕時運行,此代碼會將選定的值寫入隱藏的文本框。 然后,您的服務器端代碼可以從隱藏的文本框中讀取值(以逗號分隔)。

您可以使用以下方法直接訪問該控件的表單數據:

Request.Form[lbAttendees.UniqueID]

這將包含所選選項的值。 在處理原始表單數據時,您將只能獲取該值,而不是文本或其他選項。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM