2011-08-19 77 views
1

我有一个母版页,在其上有一个语言下拉菜单。我在会话中保存下拉的选定值。并希望检查页面加载会话中的价值。但它会给出例外,因为在页面加载时,会话中没有任何内容。 任何人都可以告诉我什么方法应该在页面加载之前调用,我可以将会话设置为默认值?在主页中获取会话值 - PageLoad

在此先感谢。

protected void ddlLanguage_SelectedIndexChanged(object sender, EventArgs e) 
    { 
     Session["Language"] = ddlLanguage.SelectedValue; 
    } 

protected void Page_Load(object sender, EventArgs e) 
    { 

     if (!IsPostBack) 
     { 

      ddlLanguage.SelectedValue = Session["Language"].ToString(); 
     } 

回答

3

你可以在会话变量初始化为在Page_Init事件中的默认值。所以在Page_Load事件被激发的时候,至少你会有一个值得检查的值。

或者,您可以在Page_Load事件&中检查Session变量的空值,如果它确实为null,则不尝试使用它的值。

对于第二种选择,改变你的代码是这样的:

protected void Page_Load(object sender, EventArgs e) 
{ 

    if (!IsPostBack) 
    { 

     ddlLanguage.SelectedValue = Session["Language"] == null ? "0" : Session["Language"].ToString(); 
    } 

与任何缺省值你有你的下拉列表中三元运算符的真实情况更换零。

+0

让我试试第二个选项 – asma

+0

它的工作。 Thanx – asma

0

你可以使用Page_PreLoad事件来设置会话变量的值...

+0

Still PageLoad第一次打电话 – asma

+1

真的吗?在y之间你不检查Session [“Language”]是否为null,就像Muhammad Akhter所建议的那样? – Waqas

+0

是我做了同样 – asma

2

您必须在使用它之前检查它,因为当您试图从会话中获取值时,它是空的并且尚未分配任何值。

if (Session["Language"] != null) 
{ 
     ddlLanguage.SelectedValue = Session["Language"].ToString(); 
} 
+0

是的,我做了同样的..但@Carl Hancke回答了第一个:) – asma

+0

两者都在同一时间回答:) –

+0

这真的是令人困惑的决定..在这种情况下,我标记答案的人少点:-s – asma

1

不需要设置在页面初始化事件默认选项,可以设置在页面加载事件语言下拉也是这样的方式:

母版页编号

protected void Page_Load(object sender, EventArgs e) 
    { 
     if (!IsPostBack) 
     { 
      if (Session["culture"] != null) 
       ddlLanguage.SelectedValue = Session["culture"].ToString(); 
      else 
      { 
       ddlLanguage.SelectedValue = "en-US"; 
       Session["culture"] = "en-US"; 
      } 
     } 
    } 

    protected void ddlLanguage_SelectedIndexChanged(object sender, EventArgs e) 
    { 
     Session["culture"] = ddlLanguage.SelectedValue; 
    } 

==== =============

通过这种方式,我可以在会话中保留选定的语言,并可以在整个应用程序中使用。