Ajax加载div与autopostback

时间:2011-10-03 00:32:25

标签: jquery .net ajax

我有一个运行jquery onclick事件的页面。该事件将外部.aspx文件加载到div中。正在加载的页面有一个下拉列表,其中包含一个autopostback属性,用于将所选项目传递给标签。

除了正在加载的.aspx文件只返回一次之外,一切正常。之后不再有autopostback。这是我的代码

----- external.aspx ------

 <script> 
protected void ddlPrices_SelectedIndexChanged(object sender, EventArgs e)
   {
    lblPrice.Text = ddlPrices.SelectedValue.ToString();
   }
 </script>


<asp:ScriptManager ID="ScriptManager1" runat="server"></asp:ScriptManager>
     <asp:UpdatePanel ID="UpdatePanel1" runat="server">
    <ContentTemplate>
<asp:DropDownList ID="ddlPrices" runat="server" AutoPostBack="true" 
    onselectedindexchanged="ddlPrices_SelectedIndexChanged">
<asp:ListItem>Basic</asp:ListItem>
<asp:ListItem>Pro</asp:ListItem>
<asp:ListItem>Platinum</asp:ListItem>
<asp:ListItem>Baller!</asp:ListItem>
</asp:DropDownList> 

<asp:Label ID="lblPrice" runat="server"></asp:Label>          
</ContentTemplate>
</asp:UpdatePanel>

---- default.aspx ------

<script>
$(document).ready(function () {
$("li#empNav1").click(function () {
$("div.subItem").load('external.aspx');
});
});
</script>

 <ul class="nav-left">
<li id="empNav1" class="selected"><a href="#">Employer Overview</a></li>
<li id="empNav2"><a href="#">Why We're Better</a><span></span></li>
</ul>
<div class="subItem"></div>

如上所述div加载得很好,但external.aspx只会更新lblPrice一次。然后它不再自动更新。任何帮助将非常感谢具体细节....

更新:我已经尝试在default.aspx中放置一个更新面板,该面板围绕正在加载但未切割它的div。

1 个答案:

答案 0 :(得分:1)

$.load()实际上从请求的URL复制HTML并将其“粘贴”到目标容器中。父页面的ViewState可能与您正在加载的页面的ViewState冲突,因此找不到对ddlPrices_SelectedIndexChanged方法的PostBack调用。

我建议将您的下拉代码放入UserControl,并将您的ScriptManager和UpdatePanel保留在父页面上。

所以你可以制作像CTRLPriceList.ascx这样的东西:

<asp:DropDownList ID="ddlPrices" runat="server" AutoPostBack="true" 
    onselectedindexchanged="ddlPrices_SelectedIndexChanged">
<asp:ListItem>Basic</asp:ListItem>
<asp:ListItem>Pro</asp:ListItem>
<asp:ListItem>Platinum</asp:ListItem>
<asp:ListItem>Baller!</asp:ListItem>
</asp:DropDownList> 

<asp:Label ID="lblPrice" runat="server"></asp:Label> 

其守则背后将是:

protected void ddlPrices_SelectedIndexChanged(object sender, EventArgs e)
{
    lblPrice.Text = ddlPrices.SelectedValue.ToString();
}

要真正探索正在发生的事情,您应该使用像Firebug或Chrome内置的HTML调试器,它可以让您实时了解在DOM中呈现的内容(例如,在处理$.load()之后) 。我有一种感觉,将一个完整的ASPX页面加载到另一个页面看起来会非常混乱,并且可能不是一个好主意,即使你确实让它工作。

同时检查Javascript错误。