2011-02-05 78 views
0

我在窗体上有一个下拉列表,它应该过滤掉或显示整个项目或特定迭代的标签云。目前,我没有遇到任何错误,但ASCX控制似乎没有更新。这里是我的代码,任何帮助将不胜感激!DropDown过滤掉ASCX控件

ASPX文件:

<asp:DropDownList ID="filteroptions" runat="server" onselectedindexchanged="filteroptions_SelectedIndexChanged" AutoPostBack="true"></asp:DropDownList> 

<asp:UpdatePanel ID="UpdateIteration" runat="server"> 
       <ContentTemplate> 
         <TagCloud:TagCloudControl ID="TagCloudControl1" runat="server" /> 
       </ContentTemplate> 
       <Triggers> 
        <asp:AsyncPostBackTrigger ControlID="filteroptions" /> 
       </Triggers> 
</asp:UpdatePanel> 

C#文件:

protected void Page_Load(object sender, EventArgs e) 
{ 

    ... 

    filteroptions.DataSource = ds; 
    filteroptions.DataTextField = "Iteration"; 
    filteroptions.DataValueField = "ProjectIterationID"; 
    filteroptions.DataBind(); 

    filteroptions.Items.Insert(0, new System.Web.UI.WebControls.ListItem("Entire Project", "0")); 

} 

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

    Session["iteration"] = selected_iteration; 
} 

ASCX CS FILE:

string proj_id, proj_name, iteration; 

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

    if (String.IsNullOrEmpty((string)Session["iteration"])) 
     iteration = "0"; 
    else 
     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(); 

    } 
+0

我个人不会使用updatepanel,因为updatepanel使真的很容易。相反,我会发起一个请求,并在响应中填写您想要tagcloud的区域。 – 2011-02-05 14:48:12

回答

0

您可以通过更换一些代码 '...',因此这个答案可能不正确。

给出的代码我认为问题出现在.aspx文件的Page_Load方法中。它似乎是数据集绑定到您的下拉列表也发生在回发。当页面收到回发后,它会将数据集绑定到下拉列表并将其selectedValue设置为第一项。完成后,处理事件并调用其侦听器。在您的方法'filteroptions_SelectedIndexChanged'中,检查selectedValue,它将具有当前第一个项目的值,而不是所选项目的值。

要解决此把下拉列表的结合在像这样(的IsPostBack!):

protected void Page_Load(object sender, EventArgs e) { 

    ... 

    if (!IsPostBack) 
    { 
     filteroptions.DataSource = ds; 
     filteroptions.DataTextField = "Iteration"; 
     filteroptions.DataValueField = "ProjectIterationID"; 
     filteroptions.DataBind(); 

     filteroptions.Items.Insert(0, new System.Web.UI.WebControls.ListItem("Entire Project", "0"))l 
    } 
} 

如果这个答案是不正确,因为它是基于错误的假设,请给我提供了完整的代码和我会和你一起思考。

+0

嘿TurBas,我把下拉列表绑定在(!ISPostBack)中,就像你说的,并且有些东西终于开始发生了。这很奇怪,因为当我从列表中选择某些迭代时,会得到不同的结果。有时,ascx控件根本不显示,有时会显示标签云,但它不正确,有时显示正确。我不知道为什么会发生这种情况:S – MiziaQ 2011-02-06 23:56:08