C# 如何在ASP.NET的Dropdownlist上获取当前项目
我的设计代码:C# 如何在ASP.NET的Dropdownlist上获取当前项目,c#,asp.net,sql,C#,Asp.net,Sql,我的设计代码: <asp:DropDownList ID ="DropDownList1" runat="server" EnableViewState="true" AutoPostBack ="true" CssClass="ddl" DataSourceID="SqlDataSource1" DataTextField="CategoryName" DataValueField="CategoryId" OnSelectedIndexChanged="DropDownList1_S
<asp:DropDownList ID ="DropDownList1" runat="server" EnableViewState="true" AutoPostBack ="true" CssClass="ddl" DataSourceID="SqlDataSource1" DataTextField="CategoryName" DataValueField="CategoryId" OnSelectedIndexChanged="DropDownList1_SelectedIndexChanged">
</asp:DropDownList>
<asp:SqlDataSource ID="SqlDataSource1" runat="server" ConnectionString="<%$ ConnectionStrings:ConnectionString %>" SelectCommand="SELECT * FROM [Categories]"></asp:SqlDataSource>
在数据库类别表中:
Book 1
Movie 2
Game 3
Music 4
书本始终是下拉列表的当前项。当我选择其他人时,他们的页面会被加载,但dropdownlist的当前值是book,我无法响应book的页面。我认为问题在于列表在每次回发时都与
SqlDataSource
绑定,因此您总是会得到第一项的值
要确保这是问题所在,请将select的顺序更改为DESC,并查看是否始终获取最后一项
将您的SQL更改为
从[Categories]中选择*按类别排序id DESC
看看你是否总是得到4
如果这是问题所在,那么您需要始终在页面加载中通过代码绑定列表,如下所示:
if(!Page.IsPostback)
{
// code here
}
你可以尝试两种方法
移动页面加载中填充代码的下拉列表,并用
if(!Page.IsPostBack)
{
//your code
}
或
由于您正在执行重定向,这意味着您的页面将再次加载默认绑定,使第一项默认选中,订阅数据绑定事件并根据查询字符串参数执行选择 ASPX
<asp:DropDownList OnDataBound="DropDownList1_DataBound" ...
post back function=“DropDownList1\u SelectedIndexChanged”Ups在哪里对不起,我编辑了它…检查页面加载事件如果(!ispostback){}这个函数应该重定向到另一个页面还是重定向到它本身?你缺少
,没有它你的答案就没有意义了them@Ted这只是一段代码片段。不管怎样,我已经编辑过这样一篇文章,从语法上来说你很好,但是当他的页面发回并且DropDownList1
再也找不到SqlDataSource1
时会发生什么呢?这不会有任何好处,因为发回的时候源代码将不可用,调用页面或绑定到数据源控件的控件的DataBind方法时,将自动调用SqlDataSource的Select方法。此外,数据绑定事件在控件的PreRender事件之后引发,该事件发生在页面的PreRender事件之后。(这适用于DataSourceID属性以声明方式设置的控件。否则,当您调用控件的DataBind方法时,事件就会发生。)这就是为什么我建议将视图中的更改作为第二种方法,我们在其中进行了更多更改以满足要求。但在第一种方法中,他只需在if(!Page.IsPostBack){//code}内的Page_Load事件处理程序中添加数据绑定代码,这样他就可以不断地对数据库进行查询并反复绑定。根据我收集的信息,他不需要这样做,这是一个母版页控件,尽管他正在使用SqlDataSource
并执行重定向!!谢谢你,我可以加载它。但现在当我打开网站时,如果我选择first book(第一项),我就无法响应,如果我选择了其他人,那么在选择第一项之后我就可以响应。这是因为索引没有改变,你可以在列表顶部插入一个占位符项,比如“选择类别”,我想你搞错了,正如OP所说:“当我选择其他人时,他们的页面会加载,但dropdownlist的当前值是book”,他正确地获得了所选值,重定向后,下拉列表返回到第一项。
<%
if(!Page.IsPostBack)
{ %>
<asp:SqlDataSource ID="SqlDataSource1" runat="server" ConnectionString="<%$ ConnectionStrings:ConnectionString %>" SelectCommand="SELECT * FROM [Categories]"></asp:SqlDataSource>
<%}
%>
<asp:DropDownList OnDataBound="DropDownList1_DataBound" ...
protected void DropDownList1_DataBound(object sender, EventArgs e)
{
if(!IsPostBack){
string selectedValue = Request.QueryString["catId"];
if(!string.IsNullOrEmpty(selectedValue))
DropDownList1.SelectedValue = selectedValue;
}
}