0

コンテンツ ページからマスター ページ テーブルを非表示にしたいと考えています。

さまざまな方法でテーブル コントロールを非表示にしようとしましたが、オンラインで次のエラー メッセージが表示されます。

tbl = (HtmlTable)Page.Master.FindControl("tbl_login");

エラー:

オブジェクト参照がオブジェクト インスタンスに設定されていません。

マスター ページのテーブル コントロールと、ログイン ページからマスター ページ コントロールを非表示にするコードを次に示します。

コード

POViewというページがあり、POを承認するためのリンクボタンが1つあり、ボタンを押すとリクエストを送信するときに、1つのマスターページ(HTMLテーブルのテキストボックスと2つのボタン)が定義されたコントロールがほとんどないPOPアップウィンドウが表示されますユーザーパスワードを認証し、DBでいくつかの更新を行い、このPOPアップウィンドウ(response.write)にメッセージを表示するログインと呼ばれる別のページに移動します。

私が望むのは、このログインページからコントロール (マスターページで定義されたテキストボックスとボタン) を非表示にすることだけです。

注: このログイン ページには、マスター ページの参照タグがありません。

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

追加:マスター ページ ボタンの onClick と呼ばれる関数を次に示します。ログインページにリクエストを送信しています。

function showHint(str, str2, str3, reason)
{

gDiv = 'appFeedback';

xmlHttp=GetXmlHttpObject();
if (xmlHttp==null)
  {
  alert ("Your browser does not support AJAX!");
  return;
  }
  //replace "tricky" chars in QS
  var pwd=  str.replace('£','!!pound!!');
  pwd=  pwd.replace('£','!!pound!!');
  pwd=  pwd.replace('£','!!pound!!');
  pwd=  pwd.replace('£','!!pound!!');
  pwd=  pwd.replace('&','!!and!!');
  pwd=  pwd.replace('&','!!and!!');
  pwd=  pwd.replace('&','!!and!!');
  pwd=  pwd.replace('&','!!and!!');

var url="login.aspx";
url=url+"?q="+pwd;
url=url+"&q2="+str2;
url=url+"&q3="+str3;
url=url+"&reason="+reason;
url=url+"&entity=<%= Request["entity"] %>";
url=url+"&sid="+Math.random();

xmlHttp.onreadystatechange=stateChanged;
xmlHttp.open("GET",url,true);
xmlHttp.send(null);
}
4

4 に答える 4

1

コンテンツページにディレクティブがある場合

<%@ MasterType VirtualPath="~/Main.Master" %>

マスターページのコンテンツにアクセスできます。ここで、テーブルを非表示にするだけのマスターページでメソッドを作成すると、次のようになります

public void SetTableUnvisible()
{
    tbl_login.Visible = false;
}

このメソッドは、コンテンツ ページの Page_Load イベントで呼び出すことができます

Master.SetTableUnvisible();

テーブルが表示されなくなります。

于 2013-01-17T14:33:13.087 に答える
1

ログインを行った後、このjavascriptを呼び出してみてくださいwindow.opener.document.getElementById("tbl_login").style.visibility="hidden";

あなたのコードでは、次のように与えられます

xmlHttp.onreadystatechange=stateChanged;

ここで、「stateChanged」は、ログイン後に起動される JavaScript 関数でなければなりません。その関数内で、非表示にするコードを記述できます。

詳細については、readystatechangedeventこちらをご覧ください:http://www.w3schools.com/ajax/ajax_xmlhttprequest_onreadystatechange.asp

ログインページから成功を返す

//After doing the Logic return the status (foreg:- i return here as "success")
Response.Clear();
Response.ContentType = "text/plain";
Response.Write("success");
Response.End();
于 2012-08-01T11:35:25.180 に答える
0

とにかくマスターページを参照していないため、1つ以上のページにテーブルが含まれていなくても、常にテーブルを削除しようとしているようです。あれは正しいですか?

その場合、常に存在するとは限らないにもかかわらず、とにかく Page.Master を逆参照しているため、コードは失敗します。これを試してください。これは、マスター ページを使用する前に存在するかどうかを確認します。

MasterPage master = Page.Master;
if (master != null)
{
    tbl = master.FindControl("tbl_login") as HtmlTable;
    if (tbl != null)
    {
        tbl.IsVisible = false;
    }
}
于 2012-08-01T11:05:45.880 に答える
-2

ログインページがマスターページを使用していない場合、サーバー上では実行できませんが、クライアント側のコードのみで実行できます。テーブルを非表示にするスクリプト メソッドを作成します。マスターページに挿入できます:

<script type="text/javascript">
function hideTable()
{
   $('#<%=tbl_login.ClientID%>').hide();
}
</script>

ログインページで:

ClientScript.RegisterStartupScript(this.GetType(), "hide", "hideTable();", true);

ところで、マスター ページで何かをしたい場合は、ページからコントロールを見つけようとしないでください。それを行うメソッドをマスターページに記述し、ページから呼び出します。マスター型にキャストMasterするか、それを行うマスター ディレクティブにマスター型を配置する必要があります。

于 2012-08-01T11:00:04.630 に答える