2009-08-10 6 views
0

J'ai un contrôle dropdownlist asp.net. Il y a deux façons de le sélectionner. Le premier est à travers un bouton qui définit la valeur dans la liste déroulante via javascript.Le contrôle déroulant ASP.Net perd son état après avoir été défini dynamiquement via javascript

La seconde consiste à sélectionner manuellement l'option de liste déroulante.

Chacune de ces méthodes fonctionne par elle-même.

Si je fais le premier suivi de la seconde, puis appuyez sur Enregistrer - la valeur enregistrée est la valeur définie par le javascript. La sélection manuelle n'a eu aucun effet.

Est-ce que quelqu'un sait pourquoi c'est le cas?

EDIT:

Dans la section Head HTML:

<script> 
function Select(allocationId) { 
    document.getElementById('Accounts').value=allocationId; 
} 
</script> 

Dans le corps HTML:

<asp:DropDownList ID="Accounts" runat="server"></asp:DropDownList> 
<button onclick="Select(<%#"'" + DataBinder.Eval(Container.DataItem, "Associated_AccountId") + "'"%>)" type="button">Select</button> 
<asp:Button ID="btn_SaveAndClose" runat="server" Text="Save and Close" OnClick="btn_SaveAndClose_Click"></asp:Button> 

Dans le code sous-jacent:

protected void btn_SaveAndClose_Click(object sender, System.EventArgs e) 
{ 
    int id = Convert.ToInt32(this.Accounts.SelectedValue); 
} 

EDIT:

Bizarrement - quand je l'utilise:

int id = Convert.ToInt32(Request.Form["Accounts"]); 

cela fonctionne. Mais je ne sais pas pourquoi.

+4

Pouvez-vous poster le code complet pour cela? – rahul

+0

Comment s'appelle le Javascript? –

+0

Inutile sans code! – womp

Répondre

1

L'erreur la plus fréquente qui provoquerait cela est que vous remplissez ou liez cette liste déroulante DropDownList chaque Page_Load ou Init, effaçant ainsi tout état avec lequel vous avez entré la page. Assurez-vous de faire une vérification (! IsPostBack) avant de remplir votre DropDownList.

Cela a fonctionné pour moi: (essayez de supprimer le IsPostBack vérifier et voir si le comportement est similaire à ce que vous voyez dans votre application!)

contenu de la page

<asp:DropDownList ID="ddlTest" runat="server"></asp:DropDownList> 
<button onclick="select(3);">Select Three</button> 
<asp:Button ID="btnSave" runat="server" OnClick="btnSave_Click" Text="Save" /> 
<script type="text/javascript" language="javascript"> 
    //<![CDATA[ 
    function select(value) { 
     var ddlTest = document.getElementById('<%=ddlTest.ClientID%>'); 
     for (var i = 0; i < ddlTest.options.length; i++) { 
      if (ddlTest.options[i].value == value) { 
       ddlTest.selectedIndex = i; 
       return; 
      } 
     } 
    } 
//]]> 
</script> 
<asp:Label ID="lblResult" runat="server"></asp:Label> 

code Derrière

protected void Page_Load(object sender, EventArgs e) 
{ 
    if (!IsPostBack) 
     PopulateDropDown(); 
} 
protected void btnSave_Click(object sender, EventArgs e) 
{ 
    lblResult.Text = ddlTest.SelectedValue; 
} 
void PopulateDropDown() 
{ 
    Dictionary<int, string> data = new Dictionary<int, string>(); 
    data.Add(1, "One"); 
    data.Add(2, "Two"); 
    data.Add(3, "Three"); 
    ddlTest.DataSource = data; 
    ddlTest.DataTextField = "Value"; 
    ddlTest.DataValueField = "Key"; 
    ddlTest.DataBind(); 
} 
+1

Vous pouvez également remplir OnInit au lieu de OnLoad, qui fonctionnera même si vous désactivez ViewState. –

Questions connexes