[英]DropDownList stuck after using .SelectedValue on him ASP.NET
我是asp.net的新手,我認為這確實是一個簡單的問題,但我找不到答案。 我的頁面(即頁面A)上有一個DropDownList,轉到該頁面的方法之一是單擊另一頁面(頁面B)上的鏈接。 通過此鏈接,我提供了一些參數,因此我在A頁的Page_load中使用它們:
protected void Page_Load(object sender, EventArgs e)
{
string strStatus = Request.QueryString["status"];
DListStatus.SelectedValue = strStatus;
}
但是在此之后,我再也無法選擇該值以外的東西,有時我看到選擇了第二個新項目,但轉眼間又回到了預加載的項目。 我以為.ClearSelection()會幫助您,但事實並非如此(或者我可能在錯誤的地方使用了它)。 所以我真的很想知道該怎么做,也將非常感謝您的幫助
檢查是否是回發
if (!Page.IsPostBack)
{
string strStatus = Request.QueryString["status"];
DListStatus.SelectedValue = strStatus;
}
當您選擇一個新的項目,它調用后回服務器? 是否可能發生SelectedIndexChanged
事件?
如果是這樣,你重挫每個后回選定的值。 Page_Load
被調用了很多 。 基本上,只要頁面在服務器端執行任何操作即可。 它是頁面所做的所有事情的頁面生命周期的一部分。 因此,頁面上的每個事件(單擊按鈕,更改選定的索引等)都將在運行任何事件處理程序代碼之前運行Page_Load
代碼。
為避免破壞此值,您可以將此代碼包裝在條件中,以檢查這是否是初始頁面加載與觸發的回發:
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
string strStatus = Request.QueryString["status"];
DListStatus.SelectedValue = strStatus;
}
}
關於頁面生命周期,您需要了解的關於ASP.NET的最重要的事情之一。 互聯網上為此提供了大量幫助。 這里是一個快速鏈接: http://blogs.msdn.com/b/aspnetue/archive/2010/01/14/asp-net-page-life-cycle-diagram.aspx 。
請注意,在處理任何事件之前,將觸發Page_Load
事件。 這意味着,如果您使用的是事件處理程序來捕獲在下拉改變當前的代碼將首先將其重置為查詢字符串值。
當然,這是一個非常大的問題,所以ASP.NET增添了Page.IsPostBack
屬性,以幫助。 僅在頁面第一次加載時為true,對於所有事件處理回發為false。 使用此信息,您可以調整例程以僅在IsPostBack
為false時應用該值。
if (!Page.IsPostBack)
{
string strStatus = Request.QueryString["status"];
DListStatus.SelectedValue = strStatus;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.