ASP DropDownListがPage_Loadイベントに読み込まれます。項目を選択してボタンを押すと、選択された項目がクリアされ、DropDownListの最初の項目が選択されます(DropDownListはページがポストバックでない場合にのみ入力されます)
助けてください
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;
}
}
ページのライフサイクルは次のことを行います(加えて、質問に関係のない他のステップ)。
OnInit
Page_Load
_アイテムを「選択」する前にリストに入力できるように、ViewStateを有効にする必要があります。この場合、Page_Loadに再入力して選択した値を失わないようにしてください。 if (!IsPostback) { // Populate }
のようなことをしてください
それ以外の場合は、すべてのページリクエストでOnInit
イベントにリストを手動で入力する必要があります。 _Page_Load
_はライフサイクルが遅すぎるため、選択したアイテムは失われます。
編集:
DropDownList
にも有効な値を設定する必要があります(ブラウザーに表示されるテキストとは別)。これはDataValueField
プロパティを通じて行われます。各値は一意である必要があります。一意でない場合は、最初の重複アイテムのみが選択されます。ブラウザでHTMLソースを見ると、次のものが必要です。
_<select>
<option value="unique_value1">Displayed text1</option>
<option value="unique_value2">Displayed text2</option>
</select>
_
一意の値は、サーバー側で適切なアイテムを選択するために使用されます。
マスターページを使用していますか?その場合は、マスターページで必ずEnableViewStateをtrueに設定してください。