单击搜索按钮时,在下拉列表中传递第一个值

时间:2012-12-27 20:20:40

标签: c# asp.net

我有一个asp按钮和四个从数据库动态填充的下拉列表。单击按钮时,应将选定的值从下拉列表传递给SQL存储过程。而是传递每个下拉列表中的第一个值而不是所选值。这是aspx页面上的代码:

<asp:DropDownList runat="server" ID="ddlCountry" AppendDataBoundItems="True">
</asp:DropDownList>
&nbsp;
<asp:DropDownList runat="server" ID="ddlTypeStructure" AppendDataBoundItems="True">
 </asp:DropDownList>
&nbsp;
<asp:DropDownList runat="server" ID="ddlCategory" AppendDataBoundItems="True">
</asp:DropDownList>
&nbsp;
<asp:DropDownList runat="server" ID="ddlSegment" AppendDataBoundItems="True">
</asp:DropDownList>
&nbsp;
<asp:Button runat="server" ID="btnSearhProjects" Text="Go" 
    CausesValidation="False" onclick="btnSearhProjects_Click" UseSubmitBehavior="False" />

以下是按钮背后的C#代码:

protected void Page_Load(object sender, EventArgs e)
    {
        if (!IsPostBack)
        {
            BindCountries();
            BindCategories();
            BindSegments();
            BindStructures();

        }



    }
public void SearchProjects()
    {
        Project project = new Project();
        string country = ddlCountry.SelectedItem.Text;
        string category = ddlCategory.SelectedItem.Text;
        string segment = ddlSegment.SelectedItem.Text;
        string structure = ddlTypeStructure.SelectedItem.Text;
        List<Project> projectList = project.GetProjects(country, category, segment, structure);
        gvProjects.DataSource = projectList;
        gvProjects.DataBind();
    }

    protected void btnSearhProjects_Click(object sender, EventArgs e)
    {
        SearchProjects();
    }

这就是我填充每个下拉列表的方式:

public void BindCountries()
    {
        List<Country> countryList = new List<Country>();
        Country country = new Country();
        countryList = country.GetCountries();

        ddlCountry.DataTextField = "CountryName";
        ddlCountry.DataValueField = "CountryID";
        ddlCountry.DataSource = countryList;
        ddlCountry.DataBind();

    }

我尝试过使用ddlCountry.SelectedValue.TextddlCountry.SelectedItem.Value但它们无效。任何帮助将不胜感激。谢谢。

5 个答案:

答案 0 :(得分:1)

if (!IsPostBack)事件的Page_Load代码块中设置断点(或某些调试语句),以确保它不会在按钮单击时执行。

还要确保DropDownList ListItems的value属性都是唯一的,否则会将其设置为第一个重复值。

答案 1 :(得分:0)

问题是页面加载没有运行 - 因为它们是动态创建的,所以它们不会在回发时设置。

您还可以在视图状态中存储这些值,但似乎您已关闭页面的视图状态。 (Viewstate 可能在动态网页上出现问题,但您需要解决此问题。)

答案 2 :(得分:0)

有几种方法可以做到这一点,但我会告诉你一个简单的答案 试试这个并报告是否有效 Autopostback设置为false可能会导致此问题,视图状态被禁用也会导致此问题

将值存储在ViewState或Session变量中,或者如果您愿意,可以创建受保护的属性

假设您正在绑定数据,

有DataBound事件,在数据限制为下拉列表后触发。当您将dataSource分配给dropwdwon并且在绑定到下拉列表的所有行之后需要选择项目

var selectedValue string.Empty;
protected void DropDownList1_DataBound(object sender, EventArgs e)
{
   selectedValue = ddlCountry.SelectedValue; // store it in some variable
}

您还可以访问DropDownList的ListItem并使用foreach查看哪些项目被选中..请确保您在 Page_Load的if(IsPostBack)记得按钮点击触发了PostBack

foreach (ListItem item in ddlCountry.Items)
{
    if (item.Selected)
    {
        // TODO: Whatever you are doing with a selected item.
    }
}

答案 3 :(得分:0)

您可以删除AppendDataBoundItems =“true”。

DropDownList AppendDataBoundItems (first item to be blank and no duplicates)

<asp:DropDownList runat="server" ID="ddlCountry">
</asp:DropDownList>
&nbsp;
<asp:DropDownList runat="server" ID="ddlTypeStructure">
 </asp:DropDownList>
&nbsp;
<asp:DropDownList runat="server" ID="ddlCategory">
</asp:DropDownList>
&nbsp;
<asp:DropDownList runat="server" ID="ddlSegment">
</asp:DropDownList>
&nbsp;
<asp:Button runat="server" ID="btnSearhProjects" Text="Go" 
    CausesValidation="False" onclick="btnSearhProjects_Click" UseSubmitBehavior="False" />

答案 4 :(得分:0)

我找到了解决问题的方法。我的主页上有method="post"的额外表单标记。这导致页面回发给自己。删除表单标记后,我就可以正确使用下拉列表了。感谢。