【问题标题】:How do you access user controls on a masterpage from the asp:content page using the master?如何使用主从 asp:content 页面访问母版页上的用户控件?
【发布时间】:2012-12-18 23:39:20
【问题描述】:

我不断收到这些“让我成为做 xyz 的工具”的请求,我们正在提交一个 web app。

所以在第三个之后,我意识到将它们放在一起并使用母版页会更容易。

我有一个名为 MessageCenter 的用户控件,用于显示错误、成功和信息性消息,因此我将它放在母版页上。

<%@ Master Language="VB" CodeFile="tfMasterPage.master.vb" Inherits="tfMasterPage" %>

<%@ Register Src="MessageCenter/msgCenter.ascx" TagName="msgCenter" TagPrefix="uc1" %>
<%@ Register Assembly="AjaxControlToolkit" Namespace="AjaxControlToolkit" TagPrefix="cc1" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head id="Head1" runat="server">
    <title>INSERT TITLE HERE</title>
    <link href="Stylesheets/EogTool.css" rel="stylesheet" type="text/css" />
    <link href="stylesheets/TF_Main_Styles.css" rel="stylesheet" type="text/css" />
    <link href="stylesheets/TF_Print_Styles.css" rel="stylesheet" type="text/css" media="print" />
</head>
<body style="background-color: #eeeeee">
    <form id="form1" runat="server">
        <div class="page">
            <div class="headerArea">
                <div class="LogoImg">
                    <img alt="Transparency Florida" src="images/TF_Logo.jpg" /></div>
                <div class="SealImg">
                    <img alt="Shining the Light on Florida's Budget" src="images/TF_Seal.jpg" /></div>
            </div>
            <div class="content">
                <h1>
                    FIS - EOG Table Maintenance</h1>
            </div>
            <asp:ScriptManager ID="ScriptManager1" runat="server" />
            <div>
                <asp:UpdatePanel ID="UpdatePanel1" runat="server">
                    <ContentTemplate>
                        <div class="content">
                            <div>
                                <uc1:msgCenter ID="MsgCenter1" runat="server" />
                            </div>
                            <asp:ContentPlaceHolder ID="ContentPlaceHolder1" runat="server">

...

通常,当 msgcenter 位于常规 aspx 页面上时,我会从代码隐藏中调用它的方法和内容,如下所示:

...

    rtn = dal.deleteRow(CInt(e.CommandArgument), currentTab())
    If Not IsNumeric(rtn) Then
        MsgCenter1.addMessage("An Error occured deletion" & rtn, , , , "E")
    Else
        MsgCenter1.addMessage("Delete Successful", , , , "S")
    End If
    bindGrid()
    MsgCenter1.Visible = True
End Sub

但是当我尝试使用母版页从页面上的 asp:content 中执行此操作时,它告诉我未声明 msgCenter1。这是某种范围问题。

我读过关于使用 findcontrol 之类的内容

ctype(master.findcontrol("tbWhatever"), textbox).text = "FOO"

但是当我尝试投射到我的用户控件时,它会抱怨,因为它再次没有被声明。

我觉得好像我只是错过了一块拼图,但从昨天下午 4 点左右开始,我就一直在躲避它。

任何建议、指针或链接都将不胜感激。

谢谢。

【问题讨论】:

    标签: asp.net user-controls master-pages


    【解决方案1】:

    首先将此指令添加到要访问母版页的内容页中

    <%@ MasterType VirtualPath="~/NameOfMasterPage.master"%>
    

    其次,在母版页上设置一个公共属性,返回您要访问的控件

    public Label MasterLabel
            {
                get
                {
                    return lblMaster;
                }
                private set
                {
                    //do nothing
                }
            }
    

    最后只需像这样访问内容页面中的控件

    Master.MasterLabel.Text = "Hello from the content page!";
    

    【讨论】:

    • 我取消了!我安装的 VS 正在遭受 dll 腐烂并且行为怪异。它确实工作!你摇滚!谢谢!!!!!!
    【解决方案2】:

    我知道您的问题已得到解答,但这并不适用,但我注意到您为“MessageCenter”控件传递了 1 个长度的字符。我会使用 Enum 而不是字符串来使您的代码不那么脆弱。就目前而言,您可以将“屁”作为参数传递,它会编译得很好。一个 Enum 会给你一些编译时检查,并避免在运行时出现任何问题。

    例子:

    消息.成功
    消息.错误
    消息.警告

    【讨论】:

    • HA。您几乎不知道,FART 是一个秘密参数选项,它使消息的文本变得多色!只是在开玩笑。你完全正确。这是另一个开发人员编写的控件,并且将其收紧在我们的“我们需要做的事情,但可能永远不会得到时间”列表中。我们一开始只是发送错误,它总是红色的,所以我们不必发送消息类型。然后方式在需求阶段之后,其中一位要求人员说,“嘿,伙计们!让我们制作彩色消息!”开发人员认为,“我们正在进行最终测试。现在不是时候。”
    【解决方案3】:

    这是我曾经使用过的。

    Master.FindControl("ControlID").Visible = false;
    

    【讨论】:

      猜你喜欢
      • 2017-12-23
      • 1970-01-01
      • 2010-09-27
      • 2010-11-25
      • 1970-01-01
      • 1970-01-01
      • 2020-01-14
      • 1970-01-01
      相关资源
      最近更新 更多