我有一个asp按钮和四个从数据库动态填充的下拉列表。单击按钮时,应将选定的值从下拉列表传递给SQL存储过程。而是传递每个下拉列表中的第一个值而不是所选值。这是aspx页面上的代码:
<asp:DropDownList runat="server" ID="ddlCountry" AppendDataBoundItems="True">
</asp:DropDownList>
<asp:DropDownList runat="server" ID="ddlTypeStructure" AppendDataBoundItems="True">
</asp:DropDownList>
<asp:DropDownList runat="server" ID="ddlCategory" AppendDataBoundItems="True">
</asp:DropDownList>
<asp:DropDownList runat="server" ID="ddlSegment" AppendDataBoundItems="True">
</asp:DropDownList>
<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.Text
和ddlCountry.SelectedItem.Value
但它们无效。任何帮助将不胜感激。谢谢。
答案 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>
<asp:DropDownList runat="server" ID="ddlTypeStructure">
</asp:DropDownList>
<asp:DropDownList runat="server" ID="ddlCategory">
</asp:DropDownList>
<asp:DropDownList runat="server" ID="ddlSegment">
</asp:DropDownList>
<asp:Button runat="server" ID="btnSearhProjects" Text="Go"
CausesValidation="False" onclick="btnSearhProjects_Click" UseSubmitBehavior="False" />
答案 4 :(得分:0)
我找到了解决问题的方法。我的主页上有method="post"
的额外表单标记。这导致页面回发给自己。删除表单标记后,我就可以正确使用下拉列表了。感谢。