AJAX CascadingDropDown ViewState Проблема - PullRequest
2 голосов
/ 12 мая 2010

Вопрос: Как сохранить содержимое (из запросов) и выбранное значение обоих раскрывающихся списков после обратной передачи?

Исходный код: Загрузите мой исходный код по этой ссылке ( ссылка теперь работает ). Просто добавьте ссылку на ваш AjaxControlToolkit

User Action: Выберите значение из каждого раскрывающегося списка. Нажмите Отправить.
После обратной передачи: StatesDrop: (выбранное значение), CitiesDrop «Выбрать город»

До и после:

альтернативный текст http://www.aphio.org.vt.edu/test/beforeandafter.GIF

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

C # ответы также приветствуются.

Default.aspx

Active States<br /><asp:DropDownList ID="StatesDrop" runat="server" /><br />
Active Cities<br /><asp:DropDownList ID="CitiesDrop" runat="server" /><br />

<ajax:CascadingDropDown ID="StatesCasc" TargetControlID="StatesDrop"
        ServicePath="WebService1.asmx" ServiceMethod="GetActiveStates"
        Category="States" runat="server"
        PromptText="Select a State" PromptValue="?"  />

<ajax:CascadingDropDown ID="CitiesCasc" TargetControlID="CitiesDrop"
        ServicePath="WebService1.asmx" ServiceMethod="GetActiveCities"
        Category="Cities" runat="server" ParentControlID="StatesDrop"
        PromptText="Select a City"  PromptValue="?"  />

WebService1.asmx.vb

Imports System.Web.Services
Imports System.Web.Services.Protocols
Imports System.ComponentModel
Imports System.Web.Script.Services
Imports AjaxControlToolkit
<System.Web.Script.Services.ScriptService()> _
<System.Web.Services.WebService(Namespace:="http://tempuri.org/")> _
<System.Web.Services.WebServiceBinding _
    (ConformsTo:=WsiProfiles.BasicProfile1_1)> _
<ToolboxItem(False)> _
Public Class WebService1: Inherits System.Web.Services.WebService

   <WebMethod()> _
   Public Function GetActiveStates (ByVal knownCategoryValues As String, _
        ByVal category As String) As CascadingDropDownNameValue()
        Dim values As New List(Of CascadingDropDownNameValue)()
        'Fill values array'
        Return values.ToArray()
    End Function

    <WebMethod()> _
    Public Function GetActiveCities (ByVal knownCategoryValues As String, _
        ByVal category As String) As CascadingDropDownNameValue()
        Dim values As New List(Of CascadingDropDownNameValue)()
        Dim kv As StringDictionary = _
         CascadingDropDown.ParseKnownCategoryValuesString(knownCategoryValues)
        Dim SelState As String = ""
        If kv.ContainsKey("State") Then SelState = kv("State")
        'Fill values array'
        Return values.ToArray()
    End Function
End Class

Default.aspx.vb

Imports System.Web.Services
Imports System.Web.Script.Services
Imports AjaxControlToolkit

Partial Public Class _Default
    Inherits System.Web.UI.Page

    Protected Sub Submit_Click(ByVal sender As Object, _
                               ByVal e As EventArgs) Handles SubmitBtn.Click
        ResultsGrid.DataBind()
    End Sub
End Class

Ответы [ 3 ]

1 голос
/ 20 мая 2010

Поскольку элементы зависимого раскрывающегося списка заполняются на стороне клиента. Сервер не знает об этом. Вы должны заполнить элементы зависимого выпадающего списка в каждом посте обратно. Поэтому напишите следующий код в вашей page_load.

if(!IsPostBack) {
 //Some logic
}
else {
    //populate child drop down list on the base of selected value of parent drop down. 
// you can set the selected value of child control by getting the selected value from Request //object for example write following code to set the value of child control

childControl.SelectedValue = Request[childControl.UniqueID];
}

надеюсь, это поможет.

0 голосов
/ 21 мая 2010

Я удалил CascadingDropDown и вместо этого использовал обычные обратные передачи и UpdatePanel.

0 голосов
/ 12 мая 2010

Чтобы сохранить содержимое раскрывающихся списков в обратной передаче, убедитесь, что логика, которая загружает элементы управления в вашем коде, находится в операторе if, чтобы проверить, является ли это обратной передачей или нет. Например ...

protected void Page_Load(object sender, EventArgs e)
    {
        if (!Page.IsPostBack)
        {
            //Load Controls
        }
    }

Сохранение данных из элементов управления будет выполняться с помощью viewstate.

...