我正在使用更新面板和ASP下拉菜单。当我从下拉列表中选择任何值时,我会从依赖于此选定值的数据库中加载一些数据。但是,每当此选择更改时,页面都将刷新。如何避免此页面刷新?我也尝试过AsyncPostBackTrigger,但仍然会出现这个问题。
<asp:ToolkitScriptManager ID="ToolkitScriptManager1" runat="server" EnablePartialRendering="false">
</asp:ToolkitScriptManager>
<asp:UpdatePanel ID="OuterUpdatePanel" runat="server">
<ContentTemplate>
<asp:DropDownList ID="ddList" CssClass="dropdown" Style="width: 200px !important;"
runat="server" AutoPostBack="true" OnSelectedIndexChanged="ddList_SelectedIndexChanged">
</asp:DropDownList>
</ContentTemplate>
</asp:UpdatePanel>
答案 0 :(得分:5)
添加此项,如果您希望下拉列表在不刷新页面的情况下触发Ajax调用而不删除AutoPostBack="true"
<Triggers>
<asp:AsyncPostBackTrigger ControlID="ddList" EventName="SelectedIndexChanged" />
</Triggers>
答案 1 :(得分:5)
我相信,问题的症结在于:
“当我从下拉列表中选择任何值时,我会从数据库中加载一些依赖于此选定值的数据,每当选择更改页面刷新时我都会遇到问题。”
有很多方法可以实现这一目标,但可能需要进行一些重组才能产生预期的效果。一个相对简单的方法是:
(1)按如下方式重新组织您的页面:
<asp:DropDownList ID="ddList" CssClass="dropdown" Style="width: 200px !important;" runat="server" AutoPostBack="false">
</asp:DropDownList>
<asp:UpdatePanel ID="OuterUpdatePanel" runat="server">
<ContentTemplate>
<!-- Content goes here -->
</ContentTemplate>
</asp:UpdatePanel>
(2)按如下方式添加脚本:
<script type="text/javascript">
function handleDDLChange() {
__doPostBack($('div[id$="OuterUpdatePanel"]').attr('id'), 'ddlList_Changed_Or_Anything_Else_You_Might_Want_To_Key_Off_Of');
}
$('input[id$="ddlList"]').change( handleDDLChange );
</script>
这是一种更“老派”的方法,但它应该可以解决您的问题。
编辑:以下说明了一种“非jQuery”的方法,上面的想法更加充实:
ASCX:
<asp:ScriptManager runat="server" />
<asp:DropDownList ID="ddlList" runat="server" onchange="handleDDLChange()">
<asp:ListItem Text="text1" />
<asp:ListItem Text="text2" />
</asp:DropDownList>
<script type="text/javascript">
function handleDDLChange() {
__doPostBack("<%= ddlList.ClientID %>", "ddlList_Changed_Or_Anything_Else_You_Might_Want_To_Key_Off_Of");
}
</script>
<asp:UpdatePanel ID="UpdatePanel1" runat="server">
<ContentTemplate>
<asp:Literal ID="litTest" runat="server" />
</ContentTemplate>
</asp:UpdatePanel>
代码隐藏:
protected void Page_Load(object sender, EventArgs e)
{
if (!Page.IsPostBack)
{
litTest.Text = "No postback";
}
else if (Request["__EVENTARGUMENT"] == "ddlList_Changed_Or_Anything_Else_You_Might_Want_To_Key_Off_Of")
{
litTest.Text = string.Format("Dropdown changed: {0}", ddlList.Text);
}
else
{
litTest.Text = "Postback for some other reason... :(";
}
}