Новое в публикации здесь, но я прочитал много других тем и нашел отличные ответы в прошлом! Я надеюсь, что кто-то знает, почему это может происходить ... В моем DDL серверное событие SelectedIndexChanged возникает только тогда, когда пользователь фактически нажимает на элемент управления и изменяет выбор ... но не когда я устанавливаю выбор с помощью кода JavaScript. Любая помощь приветствуется !!!
Вот код ...
<%@ Page Language="VB" AutoEventWireup="false" Inherits="FileUpload._Default"
EnableEventValidation="false" EnableViewState="true"
Codebehind="Default.aspx.vb" %>
<%@ Register Assembly="AjaxControlToolkit" Namespace="AjaxControlToolkit"
TagPrefix="cc1" %>
Этот код OnChange на стороне клиента запускается независимо от того, изменен ли выбор с помощью графического интерфейса или меня в коде:
function ddDBF_OnChange(dropdown)
{
UpdateSelectedMappings();
}
Когда я устанавливаю выбранное значение в js следующим образом, событие SelectedIndexChanged на стороне сервера не запускается:
dropdowns.item(i).options[k].selected = "selected";
Вот определение для элемента управления (его повторяется в виде сетки):
<asp:gridview id='gvMap' runat='server' autogeneratecolumns='False'
onrowdatabound='gvMap_rowdatabound'>
<columns>
<asp:boundfield datafield='f1' headertext='h1' />
<asp:templatefield headertext='h2'>
<itemtemplate>
<asp:dropdownlist LastSel = '' ID='ddDBF' CssClass='ddDBF' runat='server' AutoPostBack='True' onchange='ddDBF_OnChange();' OnSelectedIndexChanged='ddDBF_SelectedIndexChanged' OnDataBound = 'ddDBF_OnDataBound'
OnClientPopulated='ddDBF_OnClientPopulated' EnableViewState = 'true' >
</asp:dropdownlist>
<cc1:CascadingDropDown id='cddDBF'
runat='server'
Category='DataBaseField'
TargetControlID='ddDBF'
LoadingText='Loading Database Fields..'
ServicePath='CascadingDropDown.asmx'
ServiceMethod='GetDatabaseFields'
UseContextKey='true'
ContextKey='Set serverside gvMap_RowDataBound'
EnableViewState = 'true'
>
</cc1:CascadingDropDown>
</ItemTemplate>
</asp:templatefield>
</columns>
</asp:gridview>
... и не уверен, что это важно, но вот событие на стороне сервера:
Protected Sub ddDBF_SelectedIndexChanged(ByVal sender As Object, ByVal e As System.EventArgs)
Dim d As DropDownList = sender
d.Attributes("LastSel") = d.SelectedValue
Dim hdnSelect As HiddenField = Page.FindControl("AlreadyMapped")
Session("MappedFields") = hdnSelect.Value
End Sub
Хотя я думаю, что отсутствие запуска сервера вызывает проблему, с которой я сталкиваюсь, но я так и не объяснил, что это за проблема! : P По сути, у меня есть сетка этих каскадных выпадающих списков - состояние представления поддерживается, а значения сохраняются в обратных передачах, когда пользователь взаимодействует с ними. Однако иногда мне нужно установить значения в js-коде на стороне клиента - в этих случаях значение действительно изменяется в полях визуально, но при следующем действии обратной передачи они сбрасываются: (
Большое спасибо !!!!