The ASP.Net popup menu always returns the first value when a button is clicked.

I am trying to save a value from a simple asp.net form.

I have several controls on the page, such as a drop-down list and a text box

I populate the first drop-down list on the language page and run post-bask on the same to populate the second ddCategoryType drop-down list, which it populates with the correct values ​​based on the selected language, but the problem is when I try to get the value at the event value button clicks for ddCategoryType.SelectedItem.Value always returns 0 for some reason that I cannot figure out right now

 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) { } } 

SAMPLE.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> 

OutPut for ddCategoryType after postback

 <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> 
+4
source share
2 answers

Since you want to populate ddCategoryType based on the selected value from ddSelectLanguage, then populate the DDL based on this interaction, not 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")); } } 

Then

  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")); } 

also so that your request takes parameters.

+3
source

In Page_Load you clear the contents of ddCategoryType and therefore SelectedIndex is reset to 0.

Remember that the Load_page is always called, and this happens before the Button_Click event.

There are several ways to handle this, for example: do not execute all the code in your Page_Load else clause if SelectedIndex >= 0

+8
source

Source: https://habr.com/ru/post/1445326/


All Articles