2010-11-15 20 views
15

Ich habe eine ASP DropDownList, die auf dem Page_Load Ereignis gefüllt wird, nachdem ich ein Element auswählen und eine Schaltfläche drücken das ausgewählte Element wird gelöscht und das erste Element in der DropDownList wird ausgewählt. (Die Dropdownlist ist nur gefüllt, wenn die Seite nicht Postbacks)ASP.NET DropDownList nicht ausgewählte Element auf Postback

Hilfe bitte

if (!IsPostBack) 
    { 
      List<Country> lCountries = new List<Country>(); 
      List<CompanySchedule> lCompanySchedules = new List<CompanySchedule>(); 
      this.Load_Countries(lCountries); 
      this.Load_Schedules(lCompanySchedules); 
      if (personnelRec == null) 
      { personnelRec = new Personnel(); } 
     if (Request.QueryString["UA"] != null && Convert.ToInt32(Request.QueryString["UA"].ToString()) > 0) 
     { 
      userAccount.ID = Convert.ToInt32(Request.QueryString["UA"].ToString()); 
      App_Database.Snapshift_Select_Helper.SNAPSHIFT_SELECT_PERSONNEL_APP_ACCOUNT(ref userAccount); 
     } 
      this.imgEmployeePicture.ImageUrl = "./images/Employees/nophoto.gif"; 
      if (Request.QueryString["EI"] != null && Convert.ToInt32(Request.QueryString["EI"].ToString()) > 0) 
      { 
       this.Load_PersonnelRec(Convert.ToInt32(Request.QueryString["EI"].ToString())); 
      } 
      else 
      { 
       this.lblChangeDirectionHead.Enabled = false; 
       this.lblChangeDirections.Enabled = false; 
       this.lbSchedules.Disabled = true; 
      } 
    } 
+0

Geben Sie den Code für Ihr Page_Load-Ereignis ein. Das wird bei der Beantwortung helfen. –

+1

Haben Sie ein "if (! IsPostBack)" um Ihren Bevölkerungscode herum? – russau

+0

Ich sehe keine DropDownList in Ihrem Code. Wird es durch 'this.Load_Countries (lCountries);'? Wo versuchst du auch den ausgewählten Wert zu bekommen? –

Antwort

31

Die Seitenlebenszyklus hat die folgenden (plus andere Schritte irrelevant für Ihre Frage):

  1. OnInit
  2. Steuerelemente von ViewState auffüllen (während des Postbacks)
  3. Legen Sie die ausgewählten Werte (während des Postbacks)
  4. fest
  5. Page_Load

Sie müssen Viewstate aktiviert ist, so kann er die Liste füllen, bevor es „wählt“ das Element. Stellen Sie in diesem Fall sicher, dass Sie nicht in Page_Load auffüllen und den ausgewählten Wert verlieren. Tun Sie etwas wie if (!IsPostback) { // Populate }

Andernfalls müssen Sie die Liste bei jeder Seitenanforderung im Ereignis OnInit manuell auffüllen. Page_Load ist zu spät im Lebenszyklus, also das ausgewählte Element ist verloren.

Edit:

Die DropDownList muss auch gültige Werte gesetzt haben (getrennt vom Text im Browser angezeigt wird). Dies geschieht über die DataValueField Eigenschaft. Jeder Wert muss eindeutig sein, andernfalls wird immer nur das erste doppelte Element ausgewählt. Wenn Sie bei der HTML-Quelle in Ihrem Browser betrachten, sollten Sie haben:

<select> 
    <option value="unique_value1">Displayed text1</option> 
    <option value="unique_value2">Displayed text2</option> 
</select> 

Die eindeutige Werte den richtigen Artikel für die Auswahl auf der Serverseite verwendet werden.

+0

In dem Eigenschaftenfenster wird der EnableViewState auf True festgelegt – mattgcon

+0

Siehe meine Änderungen. Überprüfst du, ob es ein Postback ist? –

+0

Die Liste wird beim Postback NICHT neu gefüllt, sie befindet sich innerhalb einer if (! IsPostBack) -Anweisung, daher wird sie nur einmal aufgerufen. Siehe Code oben – mattgcon

3

Verwenden Sie eine Masterseite? Wenn dies der Fall ist, denken Sie daran, EnableViewState in der Masterseite auf true zu setzen.

Verwandte Themen