如何访问用户控件在母版从ASP:使用主内容页?(How do you access user con

2019-06-28 08:18发布

我不断收到对这些请求“让我的工具做XYZ”的web应用程序 ,我们正在搭建。

所以第三个之后,我意识到它会更容易一概而论它们组合在一起使用母版页。

我有叫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:内容的东西在页面上使用的母版,它告诉我,msgCenter1未声明。 这是某种形式的范围问题。

我读过有关使用的FindControl像

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

但是,当我试着投给我的用户控件,它抱怨,因为它再次,不宣。

我感觉好像我只是缺少一个一块拼图,但它已经躲避昨天我,因为下午4点左右。

任何意见,指针或链接将是非常赞赏。

谢谢。

Answer 1:

首先这个指令添加到内容页您要访问的母版页

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

其次,在母版页设置,返回要访问控制公共属性格式

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

最后只是访问控制的内容页,像这样

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


Answer 2:

我知道你的问题已经回答了,这并不适用于它,但我注意到你在1个长度字符传递你的“MessageCenter”控制。 我会用一个枚举,而不是字符串,使你的代码少一点脆。 目前的情况是,你可以作为一个参数传递“屁”,它会编译就好了。 枚举会给你一些编译时检查,并避免在运行时的任何问题。

例子:

Message.Success
Message.Error
Message.Warning



Answer 3:

这是会被使用了什么我。

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


文章来源: How do you access user controls on a masterpage from the asp:content page using the master?