2016-08-02 15 views
0

ページに保存ボタンとドロップダウンリストがあります。ページの読み込み中に!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

私は主な問題は、あなただと思いますOnLoadの代わりにPage_Loadを使用する必要があります。

Sessionを使用してSelectedValueを覚えておく必要はありません。スコッティは、myDdl値に問題がしかし、そこにある

私の作品のようなものを試してみてください...

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

感謝。ポストバック時にsaveメソッドの内部でその値を覚えていない。 – dear1

+0

また、myDdlChangeが明示的に呼び出されない限り、それは決してトリガーされません。 – dear1

+0

@ dear1現在Page_Loadを使用していますか?更新されたコードを正確に表示してください。 – Scotty

関連する問題