[英]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.