2011-08-10 35 views
1

だからここで行きます。私は "顧客"レコードの2つのドロップダウンリストを持っています。最初のものは「ストア」と呼ばれます。 2番目は「StoreWarehouse」と呼ばれます。ユーザが「Store」値を選択すると、その選択に基づいて「StoreWarehouse」ドロップダウンリストがフィルタリングされます。 jQueryとAJAXを使ってフィルタリングを行っています。私はListViewを使用しており、これはInsertItemTemplateにあります。DropDownListのSelectedValueは空白です - なぜですか?

は、ここでそのためのコードです:

 function StoreWarehouseLoad(store_ddl) { 
     var store_id = store_ddl.options[store_ddl.selectedIndex].value; 
     var js = JSON.stringify({ store: store_id }); 
     $.ajax({ 
      url: baseUrl + '/AutoComplete/StoreList.asmx/GetStores', 
      data: js, 
      dataType: "json", 
      type: "POST", 
      contentType: "application/json; charset=utf-8", 
      success: function (data) { 
       var ddl = $("#StoreWarehouse_ddl"); 
       ddl.find('option').remove(); 
       $(data.d).each(function (index) { 
        ddl.append('<option value="' + this.WarehouseID + '">' + this.WarehouseID + '</option>'); 
       }); 
       switch (culture) { 
        case "en-CA": 
         ddl.val(store_id.substring(0, 2) + "I"); 
         break; 
        case "en-US": 
         ddl.val('001'); 
         break; 
        default: 
         alert("The default warehouse cannot be set because there's something wrong with the current culture..."); 
         break; 
       } 
      }, 
      error: function (XMLHttpRequest, textStatus, errorThrown) { 
       sendErrorEmail(window.location.href, 'Customers.aspx.StoreWarehouseLoad', XMLHttpRequest); 
      } 
     }); 
    } 

このJavaScriptは、「ストア」ドロップダウンリストで選択された選択に基づいて「StoreWarehouseは」ドロップダウンリストをロードするWebサービスを呼び出します。これはすごくうまくいっています。

私の問題は、レコードを保存するときです。顧客のために新しいレコードを入力し、すべての値(StoreとStoreWarehouseのドロップダウンリスト)を入力します。私は "保存"をクリックします - それはデータベースにデータを保存するはずです。私の問題は、StoreWarehouseドロップダウンリストのSelectedValueがビジネスレイヤーに届かないことです。私はListViewとe.Valuesの "OnInserting"イベントのe.Valuesを取得しました["DefaultWarehouseId"]はnullです。ここに私のaspxページは2つのドロップダウンリストのためです:あなたが見ることができるように

<div class="labelAndTextboxContainer"> 
          <div class="labelContainer"> 
           <asp:Label CssClass="rightFloat" ID="StoreId_lbl" runat="server" Text="Branch:"></asp:Label><br /> 
          </div> 
          <div class="textboxContainer"> 
           <asp:DropDownList ID="Store_ddl" runat="server" DataSourceID="StoreDataSource" AppendDataBoundItems="true" 
            onchange="StoreWarehouseLoad(this);" DataValueField="StoreID" DataTextField="StoreID" 
            CssClass="leftFloat" Font-Size="Smaller" SelectedValue='<%# Bind("StoreID") %>'> 
            <asp:ListItem /> 
           </asp:DropDownList> 
           <asp:RequiredFieldValidator ID="StoreId_ddl_rfv" runat="server" ControlToValidate="Store_ddl" 
            Text="*" ForeColor="Red" /> 
          </div> 
         </div> 
         <br class="clear" /> 
         <div class="labelAndTextboxContainer"> 
          <div class="labelContainer"> 
           <asp:Label CssClass="rightFloat" ID="StoreWarehouse_lbl" runat="server" Text="Def. Store Warehouse:"></asp:Label><br /> 
          </div> 
          <div class="textboxContainer"> 
           <asp:DropDownList ID="StoreWarehouse_ddl" runat="server" CssClass="leftFloat" Font-Size="Smaller" 
            OnDataBound="StoreWarehouse_ddl_OnDataBound" onchange="changeWarehouse();" SelectedValue='<%# Bind("DefaultWarehouseId") %>' 
            ClientIDMode="Static"> 
           </asp:DropDownList> 
          </div> 
         </div> 

が、私は<%の#バインド(「DefaultwarehouseId」)%>に設定StoreWarehouseドロップダウンリストの「SelectedValueのを」持っています。何らかの理由でDefaultWarehouseIdがStoreWarehouseのドロップダウンリストの値を取得していない。

面白いことに、私は上に示している私はJavaScriptに次のように置くことができるであり、そのドロップダウンリストの選択した値を私に警告:なぜ、サーバー側のコードは、ピッキングされていない

alert("store warehouse selected is " + $("#StoreWarehouse_ddl").val()); 

この値を上げる?

ありがとうございました!

マイク

答えて

0

私はあなたのDropDownListコントロールのクライアント側を移入しているため、問題がある疑いがあるでしょう。ポストバックをすると、隠されたControlStateに基づいてコントロールが再構築されるため、サーバーサイドはJavaScriptで生成されたアイテムを無視します。

WebFormsでこのようなことにajaxを使用する場合は、提供されているajaxコントロールを調べて、更新パネルを使用します。

+0

ありがとうございました。 – user888636

2

@ shiznit123のように、この情報はControlStateに格納されています。私がWebFormsよりもMVCフレームワークを好む理由の1つ。

しかし、あなたの状況では、隠されたフィールドを使用してこの問題を回避できると思います。 asp:hidden。値を直接管理するだけです。したがって、ユーザーがドロップダウンリストの項目を選択すると、対応する非表示項目が更新されます。

関連する問題