下拉列表中的重复项目!

Rob*_*Rob 4 vb.net asp.net

好的,我真的希望你们可以帮我这个,我花了两天时间试图搞清楚,我想我要把电脑扔到窗外,所以我想我不妨在这里问一下:

我正在设计一个带有两个下拉列表的网页,一个用于制作汽车,另一个用于模型,两者都绑定到具有单独SQLDataSource的数据库,并使用不同的语句.我通过设置appendDataBoundItems = true并添加名为all的项目,在两者的顶部添加"All".然后,当我用一个查询字符串填充Make时,所有模型项都会被添加两次(但只有数据绑定项).

这是我的代码:

    <asp:DropDownList ID="DropDownMake" runat="server" 
        DataSourceID="SqlMakes" DataTextField="Make" DataValueField="Make" 
        AppendDataBoundItems="True" EnableViewState="False" AutoPostBack="True">
        <asp:ListItem Selected="True" Value="All">All</asp:ListItem>
    </asp:DropDownList>
    <asp:DropDownList ID="DropDownModel" runat="server" 
        AppendDataBoundItems="True" AutoPostBack="True" DataSourceID="SqlModels" 
        DataTextField="Model" DataValueField="Model" EnableViewState="False">
        <asp:ListItem>All</asp:ListItem>
    </asp:DropDownList>
    <asp:SqlDataSource ID="SqlMakes" runat="server" 
        ConnectionString="<%$ ConnectionStrings:ConnectionString %>" 
        SelectCommand="SELECT DISTINCT [Make] FROM [Parts]">
    </asp:SqlDataSource>
    <asp:SqlDataSource ID="SqlModels" runat="server" 
        ConnectionString="<%$ ConnectionStrings:ConnectionString %>" 


        SelectCommand="SELECT DISTINCT [Model] FROM [Parts] WHERE ([Make] = @Make)">
        <SelectParameters>
            <asp:ControlParameter ControlID="DropDownMake" Name="Make" 
                PropertyName="SelectedValue" />
        </SelectParameters>
    </asp:SqlDataSource>
Run Code Online (Sandbox Code Playgroud)

'并在VB文件中:

Protected Sub Page_Init(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Init
    DropDownMake.SelectedValue = Request.QueryString("Make")
    DropDownModel.SelectedValue = Request.QueryString("Model")
End Sub
Run Code Online (Sandbox Code Playgroud)

如果我删除行"DropDownMake.SelectedValue = Request.QueryString("Make")"它不再产生重复.到底是怎么回事??我发誓我花了更多时间开发整个iphone应用程序,如果有人帮忙解决这个问题,我想我将不得不为你颁奖.

谢谢!!

Tom*_*son 6

我认为您的数据绑定方法可能会被触发两次.您是否尝试为appendDataBoundItems=false事件设置然后附加事件处理程序并将事件处理程序中的OnDataBound顶部项目插入?

protected void yourDdlControl_DataBound(object sender, EventArgs e)
{
    if (yourDdlControl.Items.Count > 0)
    {
            yourDdlControl.Items.Insert(0, "All");
            yourDdlControl.Items[0].Value = "";
            yourDdlControl.SelectedIndex = 0;
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

好吧,这是c#代码,但你应该能够翻译它:).此外,您可以DataBound根据查询参数的存在来设置所选值.