【问题标题】:persist ddl values and selected value in between postbacks在回发之间保留 ddl 值和选定值
【发布时间】:2016-08-03 08:18:10
【问题描述】:

我在页面上有一个保存按钮和一个下拉列表。在页面加载中,如果 !Page.PostBack (AutoPostBack=false) 则填充下拉列表。所以,第一次加载页面时,下拉列表会被填充。我还有一个保存方法可以使用保存按钮。单击此按钮时,它应该对下拉列表的选定值执行某些操作。我的问题是下拉列表在按钮保存方法中没有值(为空)。你会如何解决这个问题?

标记:

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

【问题讨论】:

    标签: c# asp.net


    【解决方案1】:

    我认为主要问题是您应该使用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)
    {
    
    }
    

    【讨论】:

    • 感谢 Scotty,但是 myDdl 值存在问题。在回发期间在 save 方法中时它不记得它的值。
    • 另外,除非 myDdlChange 被显式调用,否则它永远不会被触发。
    • @dear1 您现在在使用 Page_Load 吗?请按原样发布您的更新代码。
    • 完美运行。我在配置 EnableViewStateMode=false 中有一个选项。必须将其切换为 true。
    猜你喜欢
    • 1970-01-01
    • 2011-06-07
    • 2012-11-11
    • 1970-01-01
    • 2012-01-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多