【问题标题】:Hide Master page controls隐藏母版页控件
【发布时间】:2012-08-01 10:42:11
【问题描述】:

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

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

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

错误:

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

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

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

【问题讨论】:

  • 您试图隐藏哪个页面的母版页控件?是“POView”页面还是 ApprovePO 页面?
  • 这些控件在母版页上,我想在弹出窗口(登录页面)上隐藏它们

标签: c# asp.net vb.net


【解决方案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();

【讨论】:

  • 我想在登录页面更新记录后隐藏它们。成功更新记录后,隐藏表格。
  • @MOH- 谢谢你们的cmets。我被要求向其他人编写的代码添加更改(如果可能),我以前从未使用过 xmlHttp 方法。整个想法是在成功更新记录后隐藏按钮。我如何知道登录页面上的记录已成功更新?
  • 登录时从登录页面返回一些状态,然后您可以从readysateevent旁边的属性“xmlhttp.responseText”中读取此文本;
  • 如何从登录页面返回一些状态?
【解决方案2】:

当内容页面有指令时

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

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

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

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

Master.SetTableUnvisible();

你的桌子就看不见了。

【讨论】:

    【解决方案3】:

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

    如果是这样,您的代码将会失败,因为无论如何您都在取消引用 Page.Master,即使它并不总是存在。试试这个,它会在尝试使用之前检查是否有母版页:

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

    【讨论】:

    • 对他有什么帮助?登录页面没有母版页。他怎么能把桌子藏起来?
    • 如果没有母版页,则if语句的条件为假,因此隐藏表的代码永远不会执行。这是非常简单的代码。
    • “从不执行”的代码始终有效。是的,我们知道,但它并不能满足您的需求。
    • 我开始觉得我在这里被拖了。你真的不明白 if 语句和 null 检查吗?如果有母版页,“if (master != null)”为真,所以我们继续查找/隐藏表格。如果没有母版页,则“if (master != null)”为 false,因此永远不会执行其中的代码(查找并隐藏表)。
    • 你没有被控制。我知道您的代码不会失败,但它不会隐藏弹出窗口中存在的表格。
    【解决方案4】:

    如果您的登录页面不使用母版页,那么您不能在服务器上执行此操作,而只能使用客户端代码。制作一个隐藏表格的脚本方法。您可以将其插入母版页:

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

    在登录页面中:

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

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

    【讨论】:

    • 不正确 - 您没有理由不能在服务器端执行此操作。在尝试调用母版页上的方法之前,您只需检查是否有 母版页。
    • 再次阅读问题。他要引用母版页的页面没有母版页。
    • 再次阅读我的答案。我知道有些页面没有母版页 - 这就是您检查是否有母版页的原因。您只有在检查 Page.Master != null 之后才调用 Page.Master.FindControl(...)。
    • @Chris 我认为页面(隐藏表格)在他登录时不会发回服务器,可能是从弹出窗口登录。问题不清楚
    • @Chris,此页面没有母版页!写在问题里!尝试提供一些有用的东西!
    猜你喜欢
    • 1970-01-01
    • 2014-05-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-11
    • 1970-01-01
    相关资源
    最近更新 更多