我的aspx页面中有一个Dropdownlist,值为:
//DropDownlist value: 1--> show notice in one day ago; 2--> 7 days ago;3--> 30 days ago.
<asp:DropDownList ID="DropDownListTime" runat="server">
AutoPostBack="true" >
<asp:ListItem Selected="True"></asp:ListItem>
<asp:ListItem Value="1"> 1 day ago </asp:ListItem>
<asp:ListItem Value="2"> 7 days ago </asp:ListItem>
<asp:ListItem Value="3"> 30 days ago </asp:ListItem>
</asp:DropDownList>
cs页面中的代码:
protected void Page_Load(object sender, EventArgs e)
{ if (!IsPostBack)
{
BindData();
}
}
public void BindData()
{
string key="";
if (string.IsNullOrEmpty(DropDownListTime.SelectedValue))
{
key = "3";
}
else
{
key = DropDownListTime.SelectedValue.ToString();
}
HyperLink1.NavigateUrl = string.Format("Allnotice.aspx?key={0}",key);
// go to page to show all notices with `1 day`,`7days`,`30 days` ago depend on the `key`
}
public void IndexNotice_Changed(Object sender, EventArgs e)
{
BindData();
}
调试时,关键是我选择的选项。但是在Dropdownlist中选择一个选项后,我点击超链接,它会传递到Allnotice.aspx
页面,键=“3”。总是,总是甚至我选择了什么选项。
详细信息:我选择7 days ago
---&gt; debug:key= 2
- &gt;然后点击Hyperlink ---&gt;下一页收到了key=3
。
帮助!
更新:我问过这个问题,但没有人可以提供帮助。所以我试着以一种简单的方式描述它,希望你不介意它是否重复。
答案 0 :(得分:0)
您尚未为DropdownList控件分配事件处理程序,因此即使页面正在回发,也不会像您期望的那样触发IndexNotice_Changed
事件。
//Assign IndexNotice_Changed event to the OnSelectedIndexChanged
<asp:DropDownList ID="DropDownListTime"
Runat="server" AutoPostBack="true"
OnSelectedIndexChanged="IndexNotice_Changed" > //NOTE HERE
<asp:ListItem Selected="True"></asp:ListItem>
<asp:ListItem Value="1"> 1 day ago </asp:ListItem>
<asp:ListItem Value="2"> 7 days ago </asp:ListItem>
<asp:ListItem Value="3"> 30 days ago </asp:ListItem>
</asp:DropDownList>
<asp:HyperLink ID="HyperLink1" runat="server"></asp:HyperLink>
答案 1 :(得分:0)
一个选项可能是在javascript中使用隐藏字段值来始终保存所选选项
<script src='http://ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js' type='text/javascript'></script>
<script type="text/javascript">
$("#<%=DropDownListTime.ClientID%>").change(function(e) {
var dpdVal=$("#<%=DropDownListTime.ClientID%>").val();
document.getElementById("<%=hiddenFieldControl.ClientID%>").value=dpdVal;
});
</script>
所以,您可以替换为:
public void BindData()
{
string key="";
if (string.IsNullOrEmpty(hiddenFieldControl.Value))
{
key = "3";
}
else
{
key = hiddenFieldControl.Value.ToString();
}
HyperLink1.NavigateUrl = string.Format("Allnotice.aspx?key={0}",key);
// go to page to show all notices with `1 day`,`7days`,`30 days` ago depend on the `key`
}