1

ここに投稿するのは初めてですが、他のスレッドをたくさん読んで、過去に素晴らしい答えを見つけました! なぜこれが起こっているのか誰かが知っていることを願っています...私の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 コードは、選択が GUI を介して変更された場合でも、コード内で自分自身によって変更された場合でも発生します。

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コードで値を設定する必要がある場合があります-そのような場合、値はボックスで視覚的に変化しますが、次のポストバックアクションでリセットされます:(

本当にありがとう!!!!

4

2 に答える 2

1

doPostBack を使用: http://www.codedigest.com/Articles/ASPNET/320_Doing_or_Raising_Postback_using _doPostBack ()_function_from_Javascript_in_AspNet.aspx

<script type="text/javascript">
        function CallServer() {
            __doPostBack('lbDoPostBack', 'JavaScript');

        }
    </script>
于 2011-02-10T21:12:52.887 に答える