0

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

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

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

错误:

你调用的对象是空的。

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

代码

有一个名为 POView 的页面,它有一个链接按钮来批准 PO,当您点击它发送请求的按钮时,它会显示弹出窗口,其中定义了一个母版页(文本框和 html 表中的两个按钮)的控件很少到另一个名为登录的页面,该页面验证用户密码并在数据库中进行一些更新,然后将消息显示到此弹出窗口(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

登录后尝试调用这个javascriptwindow.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 回答
1

当内容页面有指令时

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

您可以访问母版页的内容。现在,如果您在母版页上创建方法只是隐藏您的表格 - 像这样

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

您可以在内容页面的 Page_Load 事件上调用此方法

Master.SetTableUnvisible();

并且您的桌子不再可见。

于 2013-01-17T14:33:13.087 回答
0

听起来您总是试图删除表格,即使一个或多个页面甚至不包含该表格,因为它们无论如何都不引用母版页。那是对的吗?

如果是这样,您的代码将会失败,因为您无论如何都在取消引用 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 回答