0

我正在使用带有 AJAX 的 ASP.NET 来构建一个类似于

http://sanjosepizzaexpress.com/order-online/

如果您向下滚动到食物菜单,然后单击中间列中的食物项目,您会看到该项目向下扩展,让用户提供菜单项详细信息以进行订购。没有页面重新加载。

我正在尝试使用 C# 中的 Javaccript 使用带有 AJAX 的 ASP.NET 来获得这种效果。我遇到了一些问题。

我想扩展每个单独的食物菜单项并显示数据库中的项目详细信息,而无需重新加载完整的页面。在我的尝试中(下面的代码),整个页面总是重新加载,并且每次我点击单个项目时都会扩展每个菜单项。

我的食物菜单由单列数据绑定 asp:datagird 组成。每个数据网格项都是一个用户控件 (OM:MnuItem):

<asp:datagrid Runat="server">
   <Columns>
     <asp:TemplateColumn>
        <ItemTemplate>
          <OM:MenuItem ID="MenuItem1" ...  runat="server" />
        </ItemTemplate>
     </asp:TemplateColumn>
  </Columns>
</asp:datagrid>

MenuItem.ascx 有 2 个 div。一个 div (menuItemDisplay) 具有 MenuItem 的名称等。它最初显示在食物菜单数据网格中。当用户点击菜单中的 menuItemDisplay div 时,javascript DisplayItem 函数显示第二个 div (itemDetails)。MenuItem.ascx 包含 UpdatePanel 和 ContentTemplate :

<asp:UpdatePanel  ID="UpdatePanel1" UpdateMode="Always" ChildrenAsTriggers="true" runat="server">

<ContentTemplate>

<div id="menuItemDisplay" onclick="DisplayDetails();">
<table   >
    <tr>
        <td align="left" style="width:90%;">
            <table >
               <tr>
                 <td >
                     <asp:Label ID="nameLbl" runat="server" />
                </td>
       ... etc ...
    </tr>
</table>

<div id="itemDetails" style="visibility:hidden;" runat="server">
  ... item details ...
</div>
</div>

</ContentTemplate>

</asp:UpdatePanel>

Javascript DisplayDetails 函数:

function DisplayDetails() 
{
    __doPostBack("DisplayDetails", "");

}

MenuItem.ascx.cs Page_Load:

protected void Page_Load(object sender, EventArgs e)
{
   if (IsPostBack)
  {
       if (Request.Form["__EVENTTARGET"] == "DisplayDetails")
       {
           itemDetails.Style.Value = "visibility:visible";
        }
   }
}

MenuItem.ascx.cs Page_Load:

protected void Page_Load(object sender, EventArgs e)
{
   if (IsPostBack)
  {
       if (Request.Form["__EVENTTARGET"] == "DisplayDetails")
       {
           itemDetails.Style.Value = "visibility:visible";
        }
   }
}

ScriptManager 在 default.aspx 中:

<asp:ScriptManager EnablePartialRendering="true"
 ID="ScriptManager1"  runat="server"></asp:ScriptManager>

再说一次,我的问题是:整个页面总是会重新加载,每次我点击单个项目时都会扩展每个菜单项。

有人有什么想法吗?感谢乐队。

4

1 回答 1

0

如果您以 UpdatePanel 本身为目标,则可以使用__doPostBack() 来刷新 UpdatePanel 。

这就是戴夫·沃德的做法:

<div id="Container" onclick="__doPostBack('UpdatePanel1', '');">
于 2013-11-15T03:12:11.993 回答