Как получить доступ к пользовательским элементам управления на главной странице со страницы содержимого asp: с помощью мастера? - PullRequest
3 голосов
/ 06 августа 2009

Я продолжаю получать запросы на «сделай мне инструмент для выполнения xyz» для веб-приложения , которое мы выставляем.

Итак, после третьего я понял, что было бы проще объединить их все вместе и использовать главную страницу.

У меня есть пользовательский элемент управления, называемый 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 вечера вчера.

Любой совет, указатели или ссылки будут наиболее полезны.

Спасибо.

Ответы [ 3 ]

10 голосов
/ 06 августа 2009

Сначала добавьте эту директиву на страницу содержимого, к которой вы хотите получить доступ к главной странице

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

Во-вторых, на главной странице настройте публичную собственность, которая возвращает элемент управления, к которому вы хотите получить доступ

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

И, наконец, просто получите доступ к элементу управления на странице содержимого, например, так:

Master.MasterLabel.Text = "Hello from the content page!";
1 голос
/ 18 декабря 2012

это то, что я использовал.

Master.FindControl("ControlID").Visible = false;
1 голос
/ 07 августа 2009

Я знаю, что на ваш вопрос был дан ответ, и это не относится к нему, но я заметил, что вы передаете символы 1 длины для элемента управления "MessageCenter". Я бы использовал Enum вместо строки, чтобы сделать ваш код немного менее хрупким. В нынешнем состоянии вы можете передать «пердеть» в качестве параметра, и он будет прекрасно компилироваться. Enum даст вам некоторую проверку времени компиляции и позволит избежать проблем во время выполнения.

Примеры:

Message.Success
Message.Error
Message.Warning

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...