如何根据变量设置下拉列表默认值?

如何根据变量设置下拉列表默认值?

问题描述:

我有几个页面链接在一起,我想维护下拉选择。我已经看到很多方法可以通过会话值等来实现,但我想设置默认值,同时还可以选择其他值。如何根据变量设置下拉列表默认值?

实际上,用户将在页面1上进行选择,然后在页面2上进行选择,他们将使用这些相同的选择,但也可能想要更改他们的选择。我的想法是,我可以将选择加载到第1页的SQL表中,然后在第2页中调用该表并将值设置为变量。那么我的问题是,我将如何将默认下拉值设置为变量而不是设置值。

我正在使用VisualStudio2010和使用C#的ASP Webforms。

任何帮助或建议将不胜感激!

我当然不会为此使用表格。你第一次使用会话的猜测可能是正确的。好像你有印象,但是你不能改变会话值,...

您的网页应工作就像你喜欢:

有第1页的用户选择项目,然后存储这些会话中的值。 然后在第二页上,将会话中的值设置为下拉列表中的默认值。如果他们改变了他们的选择,只需将会话变量更新为新值即可。 然后你可以重复无限次。

编辑: 实例,

设置会话变量:

Session["DropDownValue1"] = DropDownList1.SelectedIndex;

设置一个下拉的默认valuie:在第二示例

DropDownList1.SelectedIndex = (int?)Session["DropDownValue1"] ?? 0;

??是一个空合并运算符。这意味着如果它之前的对象是空的,那就使用它之后的东西。

您将在同时使用这些例子的代码隐藏文件*.cs

然后你就可以有一个OnSelectedIndexChanged事件来更新第二页上的会话变量,一旦用户改变它,如果你喜欢。

加入这个属性到你的DropDownList在*.aspx文件: OnSelectedIndexChanged="Index_Changed"

随着事件处理程序代码在您的代码隐藏*.cs文件:

void Index_Changed(Object sender, EventArgs e) { 

    Session["DropDownValue1"] = DropDownList1.SelectedIndex; 
} 
+0

@ BinaryTox1n - 我是ASP.Net的新手。你可以给我代码示例(特别是声明会话值并将它们作为默认值),并告诉我它们进入哪个文件(aspx,后面的代码)?非常感谢您的快速响应! – Kate 2011-03-09 18:08:55

+0

@Kate我已经更新了答案以提供一些示例。让我知道,如果有什么不清楚。 – BinaryTox1n 2011-03-09 19:48:25

+0

@ BinaryTox1n - 感谢您的例子!几个简单的问题:selectedindex和selectedvalue(我正在使用)之间有什么区别?另外,我是否会将用于在页面1和页面2中设置默认值的代码添加进去,因为它将在两个页面上更新?另外,.cs中的设置默认值代码会去哪里?我试图把它放在page_load中,它给了我一个错误。是否有不同的事件放入?再次感谢! – Kate 2011-03-09 19:52:53

数据库的工作,但你也可以使用cookies或Session。你需要做的是在下拉列表selectionchanged事件中,将这些值保存到Session中(例如)。然后,当第二页的page_load事件触发时,请阅读那些会话值。

对于下拉列表,您可以从对象或常量/值中设置选定的值。

string myVal = Session["listChoice"]; 
lstChoices.SelectedValue = myVal; 
+0

@Thyamine - 感谢您的快速响应!您显示的代码是否会放在第二页上的代码中?我最初如何声明会话变量?如果我在下拉菜单中更改我的选择,这些更改会改变吗?谢谢! – Kate 2011-03-09 18:10:35

+0

@Kate - 通过在那里保存一个对象来设置会话状态。所以在第一页你会写出'Session [“myKeyName”] = lstDropDown.SelectedValue; '在页面后面的代码中,然后是我之前在第二页中写的。您使用的密钥由您决定,因此它不会根据下拉名称进行更改。 – Thyamine 2011-03-09 18:12:30

+0

@Thyamine - 我把'Session [“PAG”] = DdlPAG.SelectedValue;'在我的page_load页面1和'if(Session [“PAG”]!= null {DdlPAG.SelectedValue = Session [“PAG”]。ToString();}'在我的Page_Load中。 1到第2页,但当我尝试更改第2页上的选择时,它将它切换回会话变量。是否有办法让第2页的选择覆盖并更改会话变量? – Kate 2011-03-09 19:43:45

您可以将它Session,如果你想只持续了Session期限。如果你想要持续更长时间,你可以使用cookie,否则你需要将它存储在数据库中。

当你第一次加载DropDownList只是检查,看看是否你应该寻找一个存储的默认缺省值:

// Initialize the DDL then check for the default value 
if (Session["DDL1Default"] != null) 
{ 
    ddl1.SelectedValue = Session["DDL1Default"].ToString(); 
} 

当用户选择一个值,然后导航你应该保存它:

// in some navigate event 
Session["DDL1Default"] = ddl1.SelectedValue; 
+0

这对我来说是为了将值从页面1保存到页面2,但是如果我在第2页上更改了选择,我如何将其更新为新的会话值?谢谢! – Kate 2011-03-09 19:35:52

+0

@Kate与您最初存储它的方式相同。只需将值从DropDownList中取出并存储即可:Session [“DDL2Default”] = ddl2.SelectedValue;'Session'只是一个容器,您可以从任何页面事件中读取和写入它。 – Kelsey 2011-03-09 20:13:42

+0

当我尝试时,它将默认设置为下拉列表中的第一行,而不是我实际选择的内容。 – Kate 2011-03-09 20:48:42

您仍然可以使用会话变量。
Page_Load,设置下拉列表中的SelectedValue

myDropDownList.SelectedValue = Session["myDropDownValue"].ToString(); 


编辑
当然。只需更新myDropDownList_OnSelectedChange()事件处理程序中的变量即可。您需要确保将其他代码(您在Page_Load中将页面1中的值设置为if(!IsPostBack))防止下拉列表不更新。

+0

是否有可能让页面2上的选择更改并更新Session变量?现在它只能在一个方向上工作,但我需要能够在任一页上更改选择。谢谢! – Kate 2011-03-09 19:36:44

+0

请参阅上面的修改。 – Marcus 2011-03-09 20:43:42

谢谢大家!它现在正在工作。万一别人运行到这一点,这是我结束了:

第1页和第2页代码隐藏在Page_Load中节:

 if (!Page.IsPostBack) { 
      if (Session["PAG"] != null) { 
       DdlPAG.SelectedValue = Session["PAG"].ToString(); } } 
     Session["PAG"] = DdlPAG.SelectedValue; 

再次感谢!