简体   繁体   English

使用AJAX和__doPostBack的datagrid中的Asp.net UserControls

[英]Asp.net UserControls in datagrid using AJAX and __doPostBack

I'm using ASP.NET w/ AJAX to build a site that's similar to 我正在使用带有AJAX的ASP.NET构建类似于以下内容的网站

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

If you scroll down to the food menu, and click on a food item in the middle collumn, you see that the item expands downward to let the user to provide menu item details for ordering. 如果向下滚动到食物菜单,然后单击中间栏上的一个食物项目,您会看到该项目向下扩展,以便用户提供要订购的菜单项目详细信息。 There is no page reload. 没有页面重新加载。

I am trying to get this effect using ASP.NET w/ AJAX using Javaccript in C#. 我正在尝试在C#中使用Javaccript使用带有AJAX的ASP.NET获得这种效果。 I'm having some problems. 我有一些问题。

I want to expand each individual food menu item and display item detail data from a database without a complete page reload. 我想扩展每个食品菜单项并显示数据库中的项详细数据,而无需重新加载完整的页面。 In my attempt (code below), the whole page is always re-loaded and every menu item is expanded every time I chick on an individual item. 在我的尝试中(下面的代码),每次我每次浏览单个项目时,总是会重新加载整个页面,并扩展每个菜单项。

My food menu is comprised of a single-collumn databound asp:datagird. 我的食物菜单由单列数据绑定的asp:datagird组成。 Each datagird item is a user control (OM:MnuItem) : 每个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 has2 divs. MenuItem.ascx具有2个div。 One div (menuItemDisplay) has the MenuItem's name, etc.. It is initially displayed in the food menu datagrid. 一个div(menuItemDisplay)具有MenuItem的名称,等等。它最初显示在食物菜单数据网格中。 When the user clicks on the menuItemDisplay div in the menu, the javascript DisplayItem function displays the second div (itemDetails). 当用户单击菜单中的menuItemDisplay div时,javascript DisplayItem函数将显示第二个div(itemDetails)。 MenuItem.ascx contains the UpdatePanel and ContentTemplate : 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: JavaScript DisplayDetails函数:

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

}

MenuItem.ascx.cs Page_Load: 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: 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";
        }
   }
}

The ScriptManager is in default.aspx: ScriptManager在default.aspx中:

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

Again, my problem: The whole page is always re-loaded and every menu item is expanded every time I chick on an individual item. 同样,我的问题是:每次我重读单个项目时,总是会重新加载整个页面,并且会扩展每个菜单项。

Does anybody have any thoughts? 有人有什么想法吗? Thanks for the band with. 谢谢带。

You can use __doPostBack() to refresh an UpdatePanel, if you target the UpdatePanel itself . 如果您以UpdatePanel本身为目标,则可以使用__doPostBack()刷新UpdatePanel

This is how Dave Ward does it: 这是Dave Ward的工作方式:

<div id="Container" onclick="__doPostBack('UpdatePanel1', '');">

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM