SelectedIndexChanged用于过滤ascx控件

时间:2011-02-05 04:14:31

标签: c# asp.net ascx

我正在使用数据绑定下拉列表来填充带有项目迭代和ascx控件的组合框以显示标签云。我正在检索下拉列表的selectedValue并将其存储为会话以过滤掉标记云(对于整个项目或通过迭代)。我收到错误,因为我输入的默认值不能转换为整数。在此先感谢您的帮助!

filteroptions.Items.Insert(0, "Entire Project");

ASP.NET文件:

protected void filteroptions_SelectedIndexChanged(object sender, EventArgs e)
{
    string selected_iteration = filteroptions.SelectedValue;

    Session["iteration"] = selected_iteration;

}

ASCX CONTROL:

protected void Page_Load(object sender, EventArgs e)
{
    proj_name = Request.QueryString["project"].ToString();
    proj_id = Request.QueryString["id"].ToString();

    iteration = (string)Session["iteration"]; 

    BindTagCloud();

}

private void BindTagCloud()
{

    int pro_id = Convert.ToInt32(proj_id);
    int iteration_id = Convert.ToInt32(iteration);

 ....

 if (iteration_id != 0)
    {
        ListView1.DataSource = tagCloudNegativeIteration;
        ListView1.DataBind();

        ListView2.DataSource = tagCloudPositiveIteration;
        ListView2.DataBind();

    }
    else
    {
        ListView1.DataSource = tagCloudNegative;
        ListView1.DataBind();

        ListView2.DataSource = tagCloudPositive;
        ListView2.DataBind();

    }
}

3 个答案:

答案 0 :(得分:1)

好吧,你没有存储整数值。这段代码:

filteroptions.Items.Insert(0, "Entire Project");

可能没有做你认为它正在做的事情。这是说“添加一个新的listitem,其键为0,文本为”整个项目“。相反,它是说在 Position 0处添加一个新的listitem值和“整个项目”的文本

你可能想要类似的东西,

filteroptions.Items.Insert(0, new ListItem("Entire Project", "0"));

答案 1 :(得分:0)

使用此.. ..

if(Session["iteration"] == Defaultvalue)
  itereation = "0";
else
  iteration = (string)Session["iteration"]; 

默认值是存储在session [“iteration”]中的值,如果没有存储值,则使用null作为defaultvalue。

答案 2 :(得分:0)

问题是您在初始加载时将迭代值设置为null。如果由于任何原因,您的会话变量变为null,则可以使用此代码始终回退到默认值。您可能希望将迭代变量设为整数,以便在负载中对其进行转换。

if(String.IsNullOrEmpty(Sesssion["iteration"])
     iteration = "0";
else
     iteration = Session["iteration"]

并改变添加项目的方式,以及aquinas建议的内容。