Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/34.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何在ASP.NET的Dropdownlist上获取当前项目_C#_Asp.net_Sql - Fatal编程技术网

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;
   }
}