Alors voilà. J'ai deux listes déroulantes sur un enregistrement "client". Le premier s'appelle "Store". Le second s'appelle "StoreWarehouse". Lorsque l'utilisateur sélectionne une valeur "Store", cela filtre la liste déroulante "StoreWarehouse" en fonction de leur sélection. J'ai le filtrage effectué via jQuery et AJAX. J'utilise un ListView et c'est dans le InsertItemTemplate.La valeur SelectedValue de DropDownList est vide - pourquoi?
Voici le code pour que:
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);
}
});
}
Ce JavaScript appelle un service web qui charge la liste déroulante « StoreWarehouse » en fonction de la sélection choisie dans la liste déroulante « Store ». Tout cela fonctionne à merveille.
Mon problème est lorsque je sauvegarde un enregistrement. Dites que je vais entrer dans un nouvel enregistrement pour un client, entrez toutes les valeurs (ainsi que les listes déroulantes Store et StoreWarehouse). Je vais cliquer sur "Enregistrer" - qui est alors censé enregistrer les données dans la base de données. Mon problème est le SelectedValue de la liste déroulante StoreWarehouse ne parvient pas à la couche de gestion. J'ai même capturé l'e.Values pour l'événement "OnInserting" pour le ListView et e.Values ["DefaultWarehouseId"] est null. Voici ma page ASPX pour les deux listes déroulantes:
<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>
Comme vous pouvez le voir, j'ai le « SelectedValue » dans la liste déroulante StoreWarehouse mis à <% # Bind (« DefaultwarehouseId »)%> . DefaultWarehouseId ne récupère pas la valeur dans la liste déroulante de StoreWarehouse.
Le plus drôle est que je peux mettre ce qui suit dans mon JavaScript qui est indiqué ci-dessus et il me avertit de la valeur sélectionnée de cette liste déroulante: code côté
alert("store warehouse selected is " + $("#StoreWarehouse_ddl").val());
Pourquoi pas le serveur cueillette cette valeur?
Merci beaucoup!
Mike
Merci, ouais c'est logique. – user888636