我想隐藏内容页面中的母版页表。
我试图以不同的方式隐藏表格控件,但我在网上收到以下错误消息:
tbl = (HtmlTable)Page.Master.FindControl("tbl_login");
错误:
对象引用未设置为对象的实例。
以下是母版页上的表格控件和从登录页面隐藏母版页控件的代码。
有一个名为POView的页面,它有一个批准PO的链接按钮,当你点击按钮时,它显示了几个控件定义了一个母版页(文本框和html表中的两个按钮)的POP上窗口将请求发送到另一个名为Login的页面,该页面验证用户密码并在DB中进行一些更新,然后将消息显示到此POP窗口(response.write)。
我想要的是隐藏此登录页面中的控件(母版页上定义的文本框和按钮)。
注意:该登录页面没有母版页的任何参考标记。
@ Page Language =“C#”AutoEventWireup =“true”CodeFile =“login.aspx.cs”Inherits =“login”%>
ADDED:这是一个名为onClick of Master page按钮的函数。它正在向登录页面发送请求。
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 :(得分: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();
答案 1 :(得分:1)
当内容页面有指令
时<%@ MasterType VirtualPath="~/Main.Master" %>
您可以访问母版页的内容。现在,如果你在母版页上创建只隐藏你的表的方法 - 就像这样
public void SetTableUnvisible()
{
tbl_login.Visible = false;
}
您可以在内容页面的Page_Load事件上调用此方法
Master.SetTableUnvisible();
并且您的桌子不再可见。
答案 2 :(得分:0)
听起来你总是试图删除表,即使一个或多个页面甚至不包含表,因为它们仍然没有引用主页。这是对的吗?
如果是这样,你的代码将会崩溃,因为你无论如何都要取消引用Page.Master,即使它并不总是存在。试试这个,在尝试使用之前检查是否有母版页:
MasterPage master = Page.Master;
if (master != null)
{
tbl = master.FindControl("tbl_login") as HtmlTable;
if (tbl != null)
{
tbl.IsVisible = false;
}
}
答案 3 :(得分:-2)
如果您的登录页面未使用母版页,则您无法在服务器上执行此操作,但仅使用客户端代码。创建一个隐藏表的脚本方法。您可以将其插入母版页:
<script type="text/javascript">
function hideTable()
{
$('#<%=tbl_login.ClientID%>').hide();
}
</script>
在登录页面中:
ClientScript.RegisterStartupScript(this.GetType(), "hide", "hideTable();", true);
顺便说一句,如果你想在母版页上做任何事情,不要试图从你的页面找到它的控件。在母版页中编写一个方法,然后从您的页面调用它。您需要将Master
强制转换为主类型,或者在master指令中添加一个主类型,以便为您执行此操作。