0

ASP.NET w/AJAX を使用して、次のようなサイトを構築しています。

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

食品メニューまで下にスクロールし、中央の列の食品項目をクリックすると、項目が下に展開され、ユーザーが注文のためにメニュー項目の詳細を提供できることがわかります。ページのリロードはありません。

C#でJavaccriptを使用してAJAXとASP.NETを使用してこの効果を得ようとしています。いくつか問題があります。

ページを完全にリロードせずに、個々の食品メニュー項目を展開し、データベースから項目の詳細データを表示したいと考えています。私の試み (以下のコード) では、ページ全体が常に再読み込みされ、個々の項目を選択するたびにすべてのメニュー項目が展開されます。

私のフード メニューは、単一列のデータ バインドされた asp:datagird で構成されています。各 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 があります。1 つの div (menuItemDisplay) には、MenuItem の名前などがあります。最初は、フード メニュー データグリッドに表示されます。ユーザーがメニューの menuItemDisplay div をクリックすると、JavaScript の DisplayItem 関数によって 2 番目の 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 を更新できます。

Dave Ward 氏は次のように説明しています。

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