隐藏主页面控件

时间:2012-08-01 10:42:11

标签: c# asp.net vb.net

我想隐藏内容页面中的母版页表。

我试图以不同的方式隐藏表格控件,但我在网上收到以下错误消息:

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

错误:

  

对象引用未设置为对象的实例。

以下是母版页上的表格控件和从登录页面隐藏母版页控件的代码。

CODE

有一个名为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);
}

4 个答案:

答案 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指令中添加一个主类型,以便为您执行此操作。