2012-11-11 63 views
4

我想從一個簡單的asp.net形式保存價值。ASP.Net下拉總是返回第一個值上的按鈕單擊事件

我喜歡在頁面上幾個控件下拉&文本框的

我填在頁面加載的第一個下拉與上相同的語言&後觸發防曬填補了第二個下拉ddCategoryType它與基於選擇的語言正確的價值觀罷了,但問題是,當我試圖讓對ddCategoryType.SelectedItem.Value按鈕點擊事件值的值總是出於某種原因,我現在無法弄清楚現在

返回0
protected void Page_Load(object sender, EventArgs e) 
{ 
    if (!IsPostBack) 
    { 
     ddSelectLanguage.Items.Clear(); 
     ddSelectLanguage.DataSource = DataProvider.GetLanguages(); 
     ddSelectLanguage.DataBind(); 
     ddSelectLanguage.Items.Insert(0, new ListItem("Select Language", "0")); 
    } 
    else 
    { 
     ddCategoryType.Items.Clear(); 
     String strSql = "SELECT TypeName, TypeID FROM CategoryType WHERE LangID =" + ddSelectLanguage.SelectedItem.Value.ToString(); 
     DataSet ds = new DataSet(); 
     ds = DataProvider.Connect_Select(strSql); 
     ddCategoryType.DataSource = ds; 
     ddCategoryType.DataBind(); 
     ddCategoryType.Items.Insert(0, new ListItem("Select Type", "0")); 
    } 
} 


protected void btnSaveCategory_Click(object sender, EventArgs e) 
{ 
    objArtCat.LanguageID = int.Parse(ddSelectLanguage.SelectedItem.Value.ToString()); 
    objArtCat.CategoryName = txtCategoryName.Text; 
    objArtCat.CategoryType = int.Parse(ddCategoryType.SelectedItem.Value.ToString()); 
    objArtCat.CategoryActive = bool.Parse(ddCategoryActive.SelectedItem.Value.ToString()); 
    try 
    { 
     //bool result; 
     //result = objBLAddArticleCategory.CreateNewArticleCategory(objArtCat); 
     //if (result == true) 
     //{ 
     // Response.Redirect("PageMessage.aspx?msg='Category has been Create Successfully'", true); 
     //} 
     //else 
     //{ 
     //} 
    } 
    catch (Exception) 
    { } 
} 

樣本.ASPX CODE

<div class="row"></div> 
       <div class="row"> 
      <asp:Label ID="lblSelectLang" CssClass="txtLabel" Text="Select Language :" runat="server" ></asp:Label> 
      <asp:DropDownList ID="ddSelectLanguage" runat="server" CssClass="ddGeneral" 
         DataTextField="LangName" DataValueField="LangID" CausesValidation="True" 
         AutoPostBack="True" > 
      </asp:DropDownList> 
     <asp:RequiredFieldValidator ID="rfvddLanguage" runat="server" ErrorMessage="Please Select Language" ControlToValidate="ddSelectLanguage" 
     InitialValue="Select Language" ValidationGroup="atpAddNewArticle" ></asp:RequiredFieldValidator> 
     </div> 

     <div class="row"> 
      <asp:Label ID="lblCategoryName" CssClass="txtLabel" runat="server" Text="Category Name :"></asp:Label> 
      <asp:TextBox ID="txtCategoryName" runat="server" CssClass="txtbox300"></asp:TextBox> 
      <asp:RequiredFieldValidator ID="RFVtxtAuthorName" runat="server" ErrorMessage="*" 
       ControlToValidate="txtCategoryName" ValidationGroup="atpAddNewArticle" CssClass="validation"></asp:RequiredFieldValidator> 
     </div> 

     <div class="row"> 
      <asp:Label ID="lblCategoryType" CssClass="txtLabel" runat="server" Text="Category Type :"></asp:Label> 
      <asp:DropDownList ID="ddCategoryType" runat="server" CssClass="ddGeneral" DataTextField="TypeName" DataValueField="TypeID" > 
      </asp:DropDownList> 
     </div> 

     <div class="row"> 
      <asp:Label ID="lblCategoryActive" CssClass="txtLabel" runat="server" Text="Category Active :"></asp:Label> 
      <asp:DropDownList ID="ddCategoryActive" runat="server" CssClass="ddGeneral" > 
       <asp:ListItem Value="False" Selected="True">NO</asp:ListItem> 
       <asp:ListItem Value="True">YES</asp:ListItem> 
      </asp:DropDownList> 
     </div> 

     <div class="rowButton"> 
      </br> 
      <asp:Button ID="btnUpdateArticle" runat="server" Text="Save Category" CssClass="btn" ValidationGroup="atpAddNewArticle" onclick="btnSaveCategory_Click" />    <input id="Reset" type="reset" class="btn" value="Reset" /> 
     </div> 

輸出ddCategoryType回傳

<div class="row"> 
       <span class="txtLabel" id="MainContent_lblCategoryType">Category Type :</span> 
       <select class="ddGeneral" id="MainContent_ddCategoryType" name="ctl00$MainContent$ddCategoryType"> 
    <option value="0" selected="selected">Select Type</option> 
    <option value="1">Article</option> 
    <option value="2">News</option> 
    <option value="3">Sports</option> 
    <option value="4">People</option> 
    <option value="5">Message</option> 

</select> 
      </div> 
+0

我會放的DataSet DS =新的DataSet();在String Sql之前... 然後,您可以將第一個下拉列表設置爲postback = true。請嘗試從Form_load中刪除第二個下拉按鈕綁定,並將其放在第一個drop_down的SelectedIndexChanged內? (假設你的第二個SQL查詢返回的數據) – bonCodigo

回答

3

既然你想根據從ddSelectLanguage選擇的值來填充ddCategoryType執行所有的代碼,然後根據該交互填充DDL,而不是在Page_Load中。

protected void Page_Load(object sender, EventArgs e) 
{ 
    ddSelectLanguage.SelectedIndexChanged += new 
     EventHandler(ddSelectLanguage_SelectedIndexChanged); 
    if (!IsPostBack) 
    { 
     ddSelectLanguage.Items.Clear(); 
     ddSelectLanguage.DataSource = DataProvider.GetLanguages(); 
     ddSelectLanguage.DataBind(); 
     ddSelectLanguage.Items.Insert(0, new ListItem("Select Language", "0")); 
    } 
} 

然後

void ddSelectLanguage_SelectedIndexChanged(object sender, EventArgs e) 
{ 
     ddCategoryType.Items.Clear(); 
     String strSql = "SELECT TypeName, TypeID FROM CategoryType WHERE LangID =" + ddSelectLanguage.SelectedItem.Value.ToString(); 
     DataSet ds = new DataSet(); 
     ds = DataProvider.Connect_Select(strSql); 
     ddCategoryType.DataSource = ds; 
     ddCategoryType.DataBind(); 
     ddCategoryType.Items.Insert(0, new ListItem("Select Type", "0")); 
} 

還,讓您的查詢帶參數。

+0

您的方法似乎運作良好,但我無法理解您的代碼對其他使用方法所建議的代碼有什麼優勢,因爲這也適用。它看起來更專業,但我無法理解代碼的工作原理 – Learning

+0

因爲如果他們選擇ddSelectLanguage,選擇ddCategoryType,然後再次選擇ddSelectLanguage會發生什麼?您不會再次重新綁定ddCategoryType,因爲您的條件將不會被滿足。當用戶選擇ddSelectLanguage的新值時,您想要綁定/重新綁定ddCategoryType。 ddSelectLanguage_SelectedIndexChanged當他們選擇一個新項目時觸發......這是您想要填充ddSelectLanguage的唯一時間......所以它更有意義。 – MikeSmithDev

+0

謝謝,現在很清楚,我已將您的回覆標記爲正確,因爲它是乾淨的方法 – Learning

8

在你Page_Load你清倉ddCategoryType內容,因此SelectedIndex後重置爲0

請記住,在Page_Load總是被調用,它發生在Button_Click事件之前。

有處理這幾個方面,例如:不要在你的Page_Load的其他條款如果SelectedIndex >= 0

+0

即使我評論該行仍返回零 – Learning

+0

正如我在我的答案寫,把所有的else子句(這是有關ddCategoryType),其檢查的SelectedIndex if語句內。 – Blachshma

相關問題