2016-08-02 2 views
0

У меня есть кнопка сохранения и выпадающий список на странице. Внутри страницы Load, выпадающий список заполняется, если! Page.PostBack (AutoPostBack = false). Итак, при первом загрузке страницы выпадающий список заполняется. У меня также есть метод сохранения, чтобы перейти с кнопкой сохранения. Когда эта кнопка нажата, она должна сделать что-то с выбранным значением выпадающего списка. Моя проблема заключается в том, что выпадающий список не имеет значения (равно null) внутри метода сохранения кнопки. Как вы это исправите?Сохранять значения ddl и выбранное значение между обратными передачами

наценки:

MyClass.aspx

<%@ Page Language="C#" AutoEventWireup="true" Inherits="MyClass" %> 


<asp:Content ID="Content3" ContentPlaceHolderID="MainRegion" runat="server"> 

<div> 

<asp:DropDownList ID="myDdl" runat="server" OnSelectedIndexChanged="myDdlChange" ViewStateMode="Enabled" EnableViewState="true" /> 
</div> 
<br /> 

<div style="min-width: 300px; max-width: 770px;"> 
<asp:TextBox id="txtBox" runat="server" TextMode="MultiLine" /> 
</div> 

<div class="buttonContainer"> 
    <span > 
     <asp:Button ID="btnSave" runat="server" Text="Save" onclick="btnSave_Click" /> 
    </span> 
</div> 

</asp:Content> 

Затем в коде сзади:

MyClass.aspx.cs

public class MyClass 
    { 
     protected global::System.Web.UI.WebControls.DropDownList myDdl; 
     protected global::System.Web.UI.WebControls.TextBox txtBox; 
     protected global::System.Web.UI.WebControls.Button btnSave; 


     protected override void OnLoad(EventArgs e) 
     { 

      base.OnLoad(e); 

      if (this.Page.IsPostBack) 
       Session["selectedID"] = myDdl.SelectedValue; // my attempt to put the selected value from ddl in a session var, to use it later inside the save method but it didn't work 

      if (!Page.IsPostBack) 
      { 
       //create array1 here 
       myDdl.Items.Clear(); 
       myDdl.Items.AddRange(array1); 
       Session["selectedID"] = myDdl.SelectedValue; 

       myDdlChange(null, null); 
       this.DataBind(); 
      } 
     } 

     protected void btnSave_Click(object sender, EventArgs e) 
     { 

      //do something based on myDdl.SelectedValue (which shouldn't be null) 

     } 

     protected void myDdlChange(object source, EventArgs e) 
     { 

      txtBox.Text = myDdl.SelectedValue; 
     } 
    } 
} 

ответ

0

Я думаю, что главная проблема заключается в вас следует использовать Page_Load вместо OnLoad.

Вам не нужно использовать Session для запоминания SelectedValue.

попробовать что-то вроде этого, который работает для меня ...

protected void Page_Load(object sender, EventArgs e) 
{ 
    if (!Page.IsPostBack) 
     PopulateDropdown(); 
} 

private void PopulateDropdown() 
{ 
    myDdl.Items.Clear(); 
    var array1 = new ListItem[3]; 
    array1[0] = new ListItem("item1", "item1"); 
    array1[1] = new ListItem("item2", "item2"); 
    array1[2] = new ListItem("item3", "item3"); 
    myDdl.Items.AddRange(array1); 
    myDdl.DataBind(); 
} 

protected void btnSave_Click(object sender, EventArgs e) 
{ 
    var selectedVal = myDdl.SelectedValue; // putting a breakpoint here shows myDdl.SelectedValue is not null 
} 

protected void myDdlChange(object sender, EventArgs e) 
{ 

} 
+0

Благодаря Скотти, есть проблема со значением myDdl однако. он не помнит его значение, когда внутри метода сохранения во время обратной передачи. – dear1

+0

Кроме того, если ядро ​​не вызвано myDdlChange, оно никогда не запускается. – dear1

+0

@ dear1 Вы сейчас используете Page_Load? Пожалуйста, разместите обновленный код, как он выглядит точно. – Scotty

Смежные вопросы