2011-08-10 5 views
1

그래서 여기에 우리가 간다. "고객"레코드에 두 개의 드롭 다운 목록이 있습니다. 첫 번째는 "Store"라고합니다. 두 번째 것은 "StoreWarehouse"라고합니다. 사용자가 "상점"값을 선택하면 해당 값에 따라 "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); 
      } 
     }); 
    } 

이 자바 스크립트는 "저장"드롭 다운 목록에서 선택한 선택에 따라 "StoreWarehouse는"드롭 다운 목록을로드하는 웹 서비스를 호출합니다. 이것은 모두 훌륭하게 작동합니다.

내 문제는 레코드를 저장할 때입니다. 고객을 위해 새 레코드를 입력하고 모든 값 (Store 및 StoreWarehouse 드롭 다운 목록은 물론)을 입력합니다. "저장"을 클릭합니다 - 그러면 데이터를 데이터베이스에 저장해야합니다. 내 문제는 StoreWarehouse 드롭 다운 목록의 SelectedValue가 비즈니스 계층으로 전달되지 않는다는 것입니다. 나는 심지어 ListView와 e.Values에 대한 "OnInserting"이벤트에 대한 e.Values를 캡처했습니다 [ "DefaultWarehouseId"]는 null입니다. 여기 내 영문 페이지는 두 개의 드롭 다운 목록을 위해 : 당신이 볼 수 있듯이

<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의 드롭 다운 목록에서 값을 선택하지 않습니다.

재미있는 것은 내가 위에 표시된 내 자바 스크립트에 다음을 넣을 수 있습니다이며 그 드롭 다운 목록의 선택된 값의 저를 경고 : 왜 서버 측 코드를 따기되지

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

이 값을 올리시겠습니까?

감사합니다.

마이크

답변

0

나는 당신이 당신의 DropDownList로 제어 클라이언트 측을 채우기 때문에 문제가 의심되는 것이다. 다시 게시 할 때 서버 측은 숨겨진 ControlState를 기반으로 컨트롤을 다시 작성하기 때문에 javascript에서 생성 된 항목을 무시합니다.

WebForms에서 이런 종류의 작업을 위해 아약스를 사용하려면 제공된 아약스 컨트롤을 살펴보고 업데이트 패널을 사용하십시오.

+0

감사합니다. – user888636

2

@ shiznit123과 마찬가지로이 정보는 ControlState에 저장됩니다. WebForms보다 MVC 프레임 워크를 선호하는 이유 중 하나입니다.

그러나 상황에 따라 숨겨진 필드를 사용하여이 문제를 해결할 수 있다고 생각합니다. asp:hidden. 값을 직접 관리하면됩니다. 따라서 사용자가 드롭 다운 목록에서 항목을 선택하면 해당 숨겨진 필드가 업데이트됩니다.

관련 문제