我现在已经开展了一年的计划,我现在仍然遇到第一天问题。我有一个从SQL数据源填充的下拉列表。我想要发生的是,当从列表中选择一个项目时,使用Response.Redirect重新加载同一页面,因为我的应用程序提取查询字符串数据以填充应用程序的其他部分。问题是,重定向下拉列表后显示列表中的第一个项目,而不是当前当前选择显示的项目。 1年后,仍然有noob问题。我用谷歌搜索它并且无法找到解决方案......任何想法
page 1
<div>
<asp:DropDownList ID="ClientDD" runat="server"
AutoPostBack="True"
DataSourceID="ClientDDq"
DataTextField="CaseName"
DataValueField="filetag"
OnSelectedIndexChanged="ClientRD">
</asp:DropDownList>
<asp:SqlDataSource ID="ClientDDq" runat="server"
ConnectionString="<%$ ConnectionStrings:craftConnectionString1 %>"
SelectCommand="SELECT * FROM [CaseFiles]">
</asp:SqlDataSource>
</div>
第1.cs页
protected void Page_Load(object sender, EventArgs e)
{
if (!Page.IsPostBack)
{
ClientDD.DataBind();
ClientDD.Items.FindByValue(ClientDD.SelectedValue).Selected = true;
ClientDD.SelectedItem.Selected = true;
}
}
protected void ClientRD(object sender, EventArgs e)
{
Response.Redirect("sonic.aspx?foil=" + ClientDD.SelectedItem.Value, true);
}
}
一切正常,但下拉菜单重置。任何新的想法/样本都会有很大的帮助
感谢大卫
更新版本第2页
if (!Page.IsPostBack)
{
ClientDD.DataBind();
var selectedValue = Request.QueryString["foil"];
if (!string.IsNullOrEmpty(selectedValue))
ClientDD.Items.FindByValue(selectedValue).Selected = true;
}
}
protected void ClientRD(object sender, EventArgs e)
{
Response.Redirect("sonic.aspx?foil=" + ClientDD.SelectedItem.Value, true);
}
答案 0 :(得分:3)
首先,您为什么要使用Response.Redirect
重新加载页面?在处理回发后,页面自然会加载。
除此之外,Page_Load
中没有代码可以捕获您在重定向中传递的查询字符串值。您需要捕获该值并实际设置所选元素。可能是这样的:
if (!Page.IsPostBack)
{
ClientDD.DataBind();
// really not sure what you're doing here.
// if this isn't a post-back then there wouldn't *be* a selected value...
ClientDD.Items.FindByValue(ClientDD.SelectedValue).Selected = true;
ClientDD.SelectedItem.Selected = true;
// select based on the query string
var selectedValue = Request.QueryString["foil"];
if (!string.IsNullOrEmpty(selectedValue))
CliendDD.Items.FindByValue(selectedValue).Selected = true;
}
答案 1 :(得分:0)
而不是使用
ClientDD.SelectedItem.Selected=true;
尝试设置ClientDD.SelectedIndex
所以像这样:
if (!Page.IsPostBack)
{
ClientDD.DataBind();
var index = ClientDD.Items.IndexOf(ClientDD.Items.FindByValue(ClientDD.SelectedValue));
ClientDD.SelectedItem = index;
// select based on the query string
selectedValue = Request.QueryString["foil"];
if (!string.IsNullOrEmpty(selectedValue))
var index = ClientDD.Items.IndexOf(ClientDD.Items.CliendDD.Items.FindByValue(selectedValue));
ClientDD.SelectedItem = index;
}