1

チェックボックスがクリックされたときに、ASP.NETAJAXを介してTableRowを非表示/再表示したいと思います。

チェックボックスに次のコードがあります。

<asp:UpdatePanel ID="UpdatePanel2" runat="server">
<ContentTemplate>
  <asp:CheckBox runat="server" ID="cbViewPages" Checked="true" OnCheckedChanged="OnViewPages"  AutoPostBack="true"/>
</ContentTemplate>
  <Triggers>
    <asp:AsyncPostBackTrigger ControlID="cbViewPages" EventName="CheckedChanged"/>
  </Triggers>
</asp:UpdatePanel>

そしてこれはTableRowの場合

  <asp:TableRow runat="server" ID="PagesRow">
    <asp:TableCell VerticalAlign="Middle">Test Row</asp:TableCell>
  </asp:TableRow>

このメソッドは、チェックボックスがクリックされたときに呼び出されます。

  protected void OnViewPages(object sender, EventArgs e)
  {
    if(cbViewPages.Checked)
    {
      PagesRow.Visible = true;
    }
    else
    {
      PagesRow.Visible = false;
    }
  }

OnViewPagesは間違いなく呼び出されますが、デバッガーで確認できます。また、AJAXコードを削除すると、必要に応じてOnViewPagesが非表示/非表示になります。

この非表示/再表示機能がAJAXコードで機能しないのはなぜですか?

ドー!部分的な答えがあります。TableRowは[更新]パネルにありません。ただし、TableRowの周りにUpdatePanelを配置することはできません。これが私の新しい質問です。TableRowの周りにUpdatePanelをどのように配置しますか?

4

2 に答える 2

1

いくつかのオプション。テーブル全体に更新パネルを配置することができます(これはPetrasが提案していることです)。JavaScriptを使用してこれを行うこともできます。チェックボックスがオン/オフのときに発火する場合は、

ScriptManager.RegisterStartupScript(Me, Me.GetType(), "setRowVisibility", "setRowVisibility(" & IIf(cbViewPages.Checked, "true", "false") & ");", True)

これにより、次のようにページで定義できるJavaScript関数が呼び出されます。

function setRowVisiblity(visible) {
  var row = document.getElementById('<%=PagesRow.ClientID %>');
  if (visible) {
    row.style.display = 'table-row';
  } else {
    row.style.display = 'none';
  }
}

これは、 Panelの更新を使用するよりもはるかに効率的ですが、少し手間がかかります。私は効率が好きですが、それは私だけです。:)

于 2010-01-22T04:14:56.933 に答える
0

解決策は次のとおりです。ASPXページ

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="index.aspx.cs" Inherits="index" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title></title>
</head>
<body>
    <form id="form1" runat="server">

<asp:ScriptManager ID="scriptMgr" runat="server" />


<asp:UpdatePanel ID="UpdatePanel2" runat="server">
<ContentTemplate>
  <asp:CheckBox runat="server" ID="cbViewPages" Checked="true" OnCheckedChanged="OnViewPages"  AutoPostBack="true"/>


<asp:Table runat="server">

<asp:TableRow>
<asp:TableCell>123</asp:TableCell>
</asp:TableRow>

<asp:TableRow runat="server" ID="PagesRow">
<asp:TableCell>Row To Hide</asp:TableCell>
</asp:TableRow>
</asp:Table>

</ContentTemplate>
  <Triggers>
    <asp:AsyncPostBackTrigger ControlID="cbViewPages" EventName="CheckedChanged"/>
  </Triggers>
</asp:UpdatePanel>


</form>
</body>
</html>

ページの後ろのコード:

using System;
using System.Collections.Generic;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Net;
using System.IO;

public partial class index : System.Web.UI.Page
{
  protected void Page_Load(object sender, EventArgs e)
  {
  }

  protected void OnViewPages(object sender, EventArgs e)
  {
    if(cbViewPages.Checked)
    {
      PagesRow.Visible = true;
    }
    else
    {
      PagesRow.Visible = false;
    }
  }
}
于 2010-01-22T00:56:09.023 に答える