你的問題的癥結所在,我相信的是:
「當我從下拉列表中選擇任何值時,我會從數據庫加載一些依賴於此選定值的數據,每當選擇更改頁面將被刷新時,我都會遇到問題。」
有很多方法可以做到這一點,但它可能需要一些重組才能產生預期的效果。一個相對簡單的方式做,這將是:
(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... :(";
}
}
我已經檢查了這一點,並與
你是否在內容模板下面添加觸發器?其次,不要在內容模板下面刪除AutoPostBack =「true」 –
yes,並且所有其他控件都在內容模板中。 –