0

我有一个, 使用它我必须从数据库DropDownList中存储一些值。CheckBoxList

在我从 中选择另一个索引之前,必须存储DropDownList中的值,CheckBoxList以提示用户“在继续之前保存”警报。

我能够显示上述警报消息。但问题是一旦我更改索引DropDownList,之前选择的索引就会丢失。

有人可以帮我获取以前选择的值并在DropDownList. 因为该值需要存储在数据库中。

显示警报消息的代码是:

protected void LOC_LIST2_SelectedIndexChanged(object sender, EventArgs e)
    {
        if (CheckBoxList2.Items.Count > 0)
        {
            Label7.Visible = true;
            Label7.Text = "*Save List Before Proceeding";
        }
4

5 回答 5

1

使用全局变量。

使用下面的代码。PreviousIndex将保持前一个,CurrentIndex并将保持当前。

int PreviousIndex = -1;
int CurrentIndex = -1;

protected void LOC_LIST2_SelectedIndexChanged(object sender, EventArgs e)
{
    PreviousIndex = CurrentIndex;
    CurrentIndex = myDropdownList.Position; // Or whatever the get position is.
    if (CheckBoxList2.Items.Count > 0)
    {
        Label7.Visible = true;
        Label7.Text = "*Save List Before Proceeding";
    }
}
于 2012-08-18T13:18:40.593 回答
1

您可以在页面首次加载时获取所选值

 protected void Page_Load(object sender, EventArgs e)
 {

    if (!IsPostBack) // Because When postback occurs the selected valued changed.
    {
        ViewState["PreviousValue"] = ddl.SelectedValue;
    }
 }

并在您选择的索引更改事件中将您以前的值更新为新值

protected void ddl_SelectedIndexChanged(object sender, EventArgs e)
{
    ViewState["NewValue"] = ddl.SelectedValue;

    // Do your work with PreviousValue and then update it with NewValue so next you can acces your previousValue using ViewState["PreviousValue"]

    ViewState["PreviousValue"] = ViewState["NewValue"];   
}

或者如果您想访问不同页面上的选定值,请将其保存在 Session 中。

于 2012-08-18T13:29:49.717 回答
0

您可以尝试使用此代码 - 使用会话缓存

public string YourOldValue
{
  get
  {
     if(Session["key"] != null) 
        return (string) Session["key"];
  }
  set
  {
     Session["key"] = value;
  }   

 }

 //Set value
 YourOldValue = yourControl.SelectedValue; 
于 2012-08-18T13:19:21.813 回答
0
    protected void LOC_LIST2_SelectedIndexChanged(object sender, EventArgs e)
        {
            Session["SavedItem"] =  LOC_LIST2.SelectedItem;
            if (CheckBoxList2.Items.Count > 0)
            {
                Label7.Visible = true;
                Label7.Text = "*Save List Before Proceeding";
            }
        }

after you access on value or text
SelectedItem item = Session["SavedItem"] as SelectedItem;
if(item !=null)
{
string something= item.Value;
string otherthing =item.Text;
}
于 2012-08-18T13:26:39.487 回答
0

所以这就是最终对我有用的方法。综合以上答案。

您必须在页面/控件的 OnLoad 处理程序中跟踪先前和当前选定的索引/值。

private int PreviousSelectedIndex
{
    get { return (Page.ViewSate["prevIdx"] == null) ? -1 : (int)ViewSate["prevIdx"]; }
    set { Page.ViewSate["prevIdx"] = value; }
}

private int CurrentSelectedIndex
{
    get { return (Page.ViewSate["currIdx"] == null) ? -1 : (int)ViewSate["currIdx"]; }
    set { Page.ViewSate["currIdx"] = value; }
}

protected override void OnLoad(EventArgs e)
{
    if (!Page.IsPostBack)
    {
        PreviousDropDownValue = ddlYourDropDownList.SelectedValue;
        CurrentDropDownValue = ddlYourDropDownList.SelectedValue;
    }
    else if (Page.IsPostBack && CurrentDropDownValue != ddlYourDropDownList.SelectedValue)
    {
        PreviousDropDownValue = CurrentDropDownValue;
        CurrentDropDownValue = ddlYourDropDownList.SelectedValue;
    }
}

之后,您可以相互比较以前的值和当前值。

于 2020-05-01T15:34:59.167 回答