在这里发帖的新手,但我已经阅读了很多其他线程并在过去找到了很好的答案!我希望有人知道为什么会发生这种情况...在我的 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" %>
无论选择是通过 gui 还是由我自己在代码中更改,此客户端 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 代码中设置值 - 在这些情况下,值在框中确实会在视觉上发生变化,但在下一个回发操作中它们会被重置:(
非常感谢!!!!