我想帮助解决以下问题。我在我的母版页中实现了一个下拉列表。它有一个sql数据源,可以从中加载公司的值。根据所选的值(公司),它会在不同页面上的标签中显示该值。 主页中的ddl仍然可见,并且应该显示在第一次选择值时所执行的选定值。但是当我在ddl中选择另一个值时,它会显示第一个选择的值,依此类推。所以它没有更新或其他东西。 我的代码:
这是onselectedIndexChanged事件处理程序:
protected void DropDownListType_SelectedIndexChanged(object sender, EventArgs e)
{
String input1 = DropDownListType.Text;
String input2 = DropDownListType.SelectedValue;
String url = "~/test.aspx?pcompany="+input1;
DropDownListType.SelectedValue = input2;
Session["Company"] = input2;
Response.Redirect(url);
}
这是我在主页的Page_load方法中使用的代码:
if (Session["Company"] != null)
{
DropDownListType.SelectedValue = (String)Session["Company"];
}
如果我从page_load方法中删除最后一段代码,它会在重定向页面上使用值更新标签,但它会将我的ddl重置为默认值,而不是在选择值4时将其保持为4。
我希望大家都清楚这一点。任何帮助表示赞赏。 Ty提前。
答案 0 :(得分:3)
尝试在PreRender()方法中设置标签值。您遇到的问题是页面生命周期。我会改变你的OnLoad方法来使用
if(!IsPostBack) {
if (Session["Company"] != null)
{
DropDownListType.SelectedValue = (String)Session["Company"];
}
}
这样,您只需在页面加载时设置一次,然后页面将使用viewstate自动设置所选值。
答案 1 :(得分:0)
Load
事件在SelectedIndexChanged
事件之前被触发,这就是为什么你还没有在Session
中设置它。
答案 2 :(得分:0)
只需将DropDownList的AutoPostback属性设置为true,然后它就可以了。 这是因为否则只能在按钮或任何其他字段的PostBack上调用onselectedIndexChanged。 而且,正如上面的答案所说,使用此代码:
if(!IsPostBack) {
if (Session["Company"] != null)
{
DropDownListType.SelectedValue = (String)Session["Company"];
}
}