簡體   English   中英

ASP.NET - 丟失通過javascript填充的下拉列表選項

[英]ASP.NET - losing selection of dropdownlist populated via javascript

我在頁面上有兩個ASP.NET下拉列表控件。 第一個回調到服務器並獲得一個數組,該數組返回給客戶端並用於通過javascript填充第二個下拉列表。 但是,如果我在第二個(並且新填充的)下拉列表中進行選擇,然后進行回發,則第二個下拉列表的選擇和內容將丟失。 這是一個問題,因為我需要獲取所選值並在回發后保留列表的內容。

我該如何解決? 我認為這是在回發之前的某個時刻更新viewstate的問題?


我填充的控件是ASP.NET下拉列表。 這是我用來填充它們的javascript。

使用的代碼如下(為簡潔起見,略微減少):

ASP.NET控件我正在填充:

<asp:DropDownList ID =“ddlStateCounty”runat =“server”OnSelectedIndexChanged =“ddlStateCounty_OnSelectedIndexChanged”AutoPostBack =“true”/>

回調獲取逗號分隔值列表的代碼:

public void RaiseCallbackEvent(string eventArgument)
    {
    return "1, 2, 3";
}

Javascript人口代碼:

function ReceiveServerData(retValue)
{ 
    var statesArray = retValue.split(',');
    var statesList = document.getElementById('{0}');

    if (statesArray.length > 0 && statesList != null)
        {
                for (var j = 0; j < statesArray.length; j++)
            {
                    var newOption = document.createElement('OPTION');
                        statesList.options.add(newOption);
            newOption.value = statesArray[j].toString().trim();
                    newOption.innerText = statesArray[j];
                }
    }
}

您說明沒有ViewState權限是正確的,這就是為什么在將數據發回服務器時不會填充值的原因。

強烈建議您遷移到使用級聯下拉的ASP.NET AJAX控件工具包中(它既有.NET 2.0和.NET 3.5版本),因為它確實你是什么之后,它通過回傳維護。

您的另一個選擇是在JavaScript填充的下拉列表中有一個onchange事件,然后在其中填充隱藏字段,因為它將被發布回服務器,並且提交的值將保留在發布的數據中,就像是:

$addHandler('change', $get('dynamicDDL'), function () { $get('hiddenField').value = this.options[this.selectedIndex].value; });

對於演示,我使用MS AJAX簡寫添加事件等。有關我使用的方法的更多信息可以在這里找到: http//msdn.microsoft.com/en-au/library/bb397536.aspx

Request.Form [Control.UniqueID]為您提供所選值。

只需使用response.forms集合即可獲取所選值。

我猜“你沒有按照asp.net的方式做事”。

在我看來,如果你的javascript修改不是原生的asp.net,那么你填充的元素不是asp.net控件,所以你在回發中丟失它們。 asp.net確實需要它的模型和實際頁面之間的緊密綁定。

可能會離開基地 - 如果你可以發布一些代碼會有所幫助。 (JS和codebehind方法)

編輯新信息:

對 - 所以你基本上是通過基於AJAXified返回字符串(?)的JS創建一個完全正常的html元素的負載,asp.net代碼隱藏沒有任何概念 我不是100%確定這是自己沒有設置測試應用程序的問題,但聽起來是正確的。

檢查Request.Forms然后 - 正如其他人所建議的那樣 - 將是現在解決這個問題的最簡單的方法,但是你應該記住,當你偏離它想要的方式時,asp.net會越來越痛苦你到。 我認為值得研究如何從代碼隱藏中添加這些新選項。

暫無
暫無

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

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