2012-08-01 134 views
0

我想從內容頁面隱藏母版頁表。隱藏母版頁控件

我曾試圖隱瞞以不同的方式表的控制,但我得到的線以下錯誤信息:

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

錯誤:

Object reference not set to an instance of an object.

這裏是母版頁上的表格控件和從登錄頁面隱藏主頁面控件的代碼。

CODE

有一個叫POView頁面,它已得到一個鏈接按鈕批准PO,並表示已經得到了彈出窗口幾個控件定義一個母版頁(文本框,並在HTML表中的兩個按鈕)當你點擊按鈕時,它將請求發送到另一個稱爲Login的頁面,該頁面驗證用戶密碼並在DB中進行一些更新,然後將消息顯示在此POP窗口(response.write)中。

我要的只是從此登錄頁面隱藏控件(在母版頁上定義的文本框和按鈕)。

注意:該登錄頁面沒有任何主頁面的引用標籤。

@頁面語言= 「C#」 AutoEventWireup = 「真」 的CodeFile = 「login.aspx.cs」 繼承= 「登錄」 %>

ADDED:這裏是被稱爲主站的的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); 
} 
+0

您試圖隱藏哪個頁面的主頁面控件?它是「POView」頁還是ApprovePO頁? – shajivk 2012-08-01 11:07:38

+0

這些控件位於母版頁上,我想將它們隱藏在彈出窗口中(登錄頁面) – user1263981 2012-08-01 11:30:10

回答

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

從Loginpage返回成功

//After doing the Logic return the status (foreg:- i return here as "success") 
Response.Clear(); 
Response.ContentType = "text/plain"; 
Response.Write("success"); 
Response.End(); 
+0

我想在更新登錄頁面上的記錄後隱藏它們。記錄成功更新後,隱藏表格。 – user1263981 2012-08-01 11:39:51

+0

查看更新 – shajivk 2012-08-01 11:45:19

+0

@ MOH-感謝您的意見。我被要求將修改(如果可能的話)添加到其他人編寫的代碼中,我以前從未使用過xmlHttp方法。整個想法是在記錄更新成功後隱藏按鈕。我如何知道登錄頁面上的reecord已成功更新? – user1263981 2012-08-01 11:54:22

-2

如果您的登錄頁面沒有使用母版頁,那麼您不能在服務器上做,但只能使用客戶端代碼。製作隱藏表格的腳本方法。您可以在母版頁插入:

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

在登錄頁面:

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

順便說一句,如果你想在母版頁做任何事情,不要試圖找到它的控制從你的頁面。在母版頁中編寫一個方法,然後在頁面中調用它。您需要將Master轉換爲主類型,或者將主類型放在主指令中,以便爲您執行此操作。

+1

不正確 - 沒有理由不能爲此服務器端執行此操作。在嘗試調用母版頁上的方法之前,您只需檢查是否有*母版頁。 – Chris 2012-08-01 11:08:07

+0

再次閱讀問題。他想要引用母版頁的頁面沒有母版頁。 – 2012-08-01 11:11:59

+0

再次閱讀我的答案。我知道一些頁面沒有母版頁 - 這就是爲什麼您檢查是否有母版頁。您只需在檢查Page.Master!= null後調用Page.Master.FindControl(...)。 – Chris 2012-08-01 11:13:10

0

這聽起來像你試圖總是刪除表,即使一個或多個頁面甚至不包含表,因爲它們無論如何都沒有引用母版頁。那是對的嗎?

如果是這樣,那麼您的代碼將會崩潰,因爲無論如何您都會取消引用Page.Master,即使它不會始終存在。試試這個,這檢​​查,看看是否有一個母版頁嘗試使用它之前:

MasterPage master = Page.Master; 
if (master != null) 
{ 
    tbl = master.FindControl("tbl_login") as HtmlTable; 
    if (tbl != null) 
    { 
     tbl.IsVisible = false; 
    } 
} 
+0

它如何幫助他?登錄頁面沒有母版頁。他怎麼能隱藏桌子? – 2012-08-01 11:12:48

+0

如果沒有母版頁,則if語句的條件爲false,因此隱藏該表的代碼從不執行。這是非常簡單的代碼。 – Chris 2012-08-01 11:16:17

+0

「永不執行」的代碼總能正常工作。是的,我們知道它,但它不會做你想要的。 – 2012-08-01 11:17:42

1

當內容頁有指令

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

您可以訪問母版頁的內容。現在,如果你讓母版頁上的方法,只是hidding你的表 - 這樣的事情

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

你可以調用內容頁

Master.SetTableUnvisible(); 

的Page_Load事件這種方法,你的表是不可見。

相關問題