C# 隐藏母版页控件

C# 隐藏母版页控件,c#,asp.net,vb.net,C#,Asp.net,Vb.net,我想从内容页隐藏母版页表 我试图以不同的方式隐藏表格控件,但在第行收到以下错误消息: tbl = (HtmlTable)Page.Master.FindControl("tbl_login"); 错误: 对象引用未设置为对象的实例 这是母版页上的表控件和从登录页隐藏母版页控件的代码 function showHint(str, str2, str3, reason) { gDiv = 'appFeedback'; xmlHttp=GetXmlHttpObject(); if (xmlHtt

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

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

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

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

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

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);
}

有一个名为POView的页面,它有一个用于批准PO的链接按钮,并显示一个弹出窗口,其中定义了几个控件一个母版页(html表中的文本框和两个按钮)当您点击按钮时,它会将请求发送到另一个名为Login的页面,该页面会验证用户密码并在DB中进行一些更新,然后将消息显示到这个弹出窗口(response.write)

我只想从这个登录页面隐藏控件(母版页上定义的文本框和按钮)

注意:登录页面没有母版页的任何引用标记

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

添加:这是一个名为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);
}
函数showHint(str、str2、str3、reason)
{
gDiv='appFeedback';
xmlHttp=GetXmlHttpObject();
if(xmlHttp==null)
{
警告(“您的浏览器不支持AJAX!”);
返回;
}
//替换QS中的“棘手”字符
变量pwd=str.replace(“£”和“!!磅!!”);
pwd=pwd.替换(“£”和“!!磅!!”);
pwd=pwd.替换(“£”和“!!磅!!”);
pwd=pwd.替换(“£”和“!!磅!!”);
pwd=pwd.replace(“&”、“!!和!!”);
pwd=pwd.replace(“&”、“!!和!!”);
pwd=pwd.replace(“&”、“!!和!!”);
pwd=pwd.replace(“&”、“!!和!!”);
var url=“login.aspx”;
url=url+“?q=“+pwd;
url=url+“&q2=“+str2;
url=url+“&q3=“+str3;
url=url+“&reason=“+reason;
url=url+“&entity=”;
url=url+“&sid=“+Math.random();
onreadystatechange=stateChanged;
open(“GET”,url,true);
xmlHttp.send(空);
}

如果您的登录页不使用母版页,则您不能在服务器上使用母版页,而只能使用客户端代码。创建一个隐藏表的脚本方法。您可以将其插入母版页:

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

顺便说一句,如果您想在母版页中执行任何操作,请不要尝试从您的页面中查找母版页上的控件。在母版页中编写执行此操作的方法,并从页面中调用它。您需要将
Master
强制转换为Master类型,或者在Master指令中添加一个Master类型来为您执行此操作。

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

如果是这样,您的代码将崩溃,因为您正在取消对Page.Master的引用,尽管它并不总是存在。尝试此操作,在尝试使用母版页之前检查母版页是否存在:

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

在完成登录
window.opener.document.getElementById(“tbl_登录”).style.visibility=“hidden”之后,尝试调用此javascript

在您的代码中,它被指定为

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();

当内容页有指令时

<%@ MasterType VirtualPath="~/Main.Master" %>
您可以在内容页的页面加载事件上调用此方法

Master.SetTableUnvisible();

并且您的表不再可见。

您试图隐藏哪个页面的母版页控件?是“POView”页面还是ApprovePO页面?这些控件位于母版页上,我想将它们隐藏在弹出窗口(登录页面)上。不正确-没有理由不能在服务器端执行此操作。在尝试调用母版页上的方法之前,您只需检查母版页是否存在。请再次阅读问题。他想引用母版页的页面没有母版页。请再次阅读我的答案。我知道有些页面没有母版页-这就是为什么你要检查是否有母版页。只有在检查了Page.Master.FindControl(…)之后,才能调用Page.Master.FindControl!=null。@Chris我认为当他登录时,页面(隐藏表格)不会发回服务器,可能是从弹出窗口登录。问题并非如此clear@Chris,此页没有母版页!这是写在问题上的!试着提供一些有用的东西!这对他有什么帮助?登录页没有母版页。他怎么能隐藏表呢?如果没有母版页,If语句的条件是false,那么隐藏表的代码永远不会执行。这是非常简单的代码,“从不执行”的代码总是有效的。是的,我们知道,但这不是你想要的。我开始觉得我在这里被人耍了。您真的不明白if语句和null检查吗?如果有母版页,“If(master!=null)”为true,那么我们继续查找/隐藏该表。如果没有母版页,“If(master!=null)”为false,因此其中的代码(查找和隐藏表)永远不会执行。您不会被拖拽。我知道你的代码不会失败,但它不会隐藏弹出窗口中存在的表。我想在更新登录页面上的记录后隐藏它们。成功更新记录后,隐藏该表。@MOH-谢谢您的评论。我被要求对其他人编写的代码添加更改(如果可能的话),我以前从未使用过xmlHttp方法。整个想法是在记录成功更新后隐藏按钮。如何知道reecord已在登录页面上成功更新?登录时从登录页面返回一些状态,然后您可以从readysateevent中的属性“xmlhttp.responseText”读取此文本;如何从登录页面返回一些状态?让我们
Master.SetTableUnvisible();