Не удается получить доступ к главной странице из пользовательского контроля - PullRequest
1 голос
/ 17 июля 2010

Код моей главной страницы выглядит примерно так:

namespace Recipes
{
    public partial class MasterPage : System.Web.UI.MasterPage
    {
        ...

        public void UpdateUserLogin()
        {
            NicknameLbl.Text = ((Recipes.BasePage)Page).CurrentUser.Nickname;
        }

        ...
    }
}

Я хочу вызвать метод UpdateUserLogin() из пользовательского элемента управления, что-то вроде этого:

((Recipes.MasterPage)this.Page.Master).UpdateUserLogin();

Но по какой-то причине компилятор не знает Recipes.MasterPage (вам не хватает сборки, блаблабла). Извините, я не могу показать точное сообщение об ошибке, оно на французском языке.

Возможно, проблема в том, что я добавил пространство имен Recipes вокруг MasterPage вручную, оно не было добавлено VS. Кстати, я использую VS Web Developer Express 2008.

Ты хоть представляешь, как я могу заставить этот звонок работать?

Ответы [ 4 ]

0 голосов
/ 17 июля 2010

Если ваш проект является проектом веб-сайта (а не проектом веб-приложения), то у вас нет пространства имен проекта.Весь код, на который ссылаются файлы aspx.cs или master.cs, должен храниться в каталоге App_Code, поскольку компилятор ASP.Net будет создавать несколько сборок вместо 1, и не будет предсказуемо, какая сборка будет содержать какой код aspx.

Обновление после 1-го комментария:

.ascx.cs и .aspx.cs остаются там, где их размещает VS.Но если вы хотите сослаться на классы и т. Д., Их нужно поместить в App_Code, например, в объекты Recipes.MasterPage или Recipes.BasePage.

0 голосов
/ 17 июля 2010

Я бы порекомендовал привязать данные NicknameLbl к свойству CurrentUser.Nickname. Тогда текст NicknameLbl будет обновляться автоматически при изменении свойства.

0 голосов
/ 17 июля 2010
  1. включает директиву MasterType вверху ASPX-файла страницы содержимого:

    '<% @ MasterType virtualpath = "~ / DetailsMaster.master"%>'

  2. включить публичный метод в главную страницу

    публичный void UpdateUserLogin (строковое значение) {NicknameLbl.Text = value;}

  3. доступ к методу со страницы содержимого с использованием основного синтаксиса:

    Master.UpdateUserLogin (Some Text ");

http://www.codeproject.com/KB/aspnet/Master_and_Contents.aspx

0 голосов
/ 17 июля 2010

И MasterPage, и UserControl являются дочерними элементами управления страницы, на которой они используются.Ваш UserControl потенциально может быть использован на странице, которая не использует вашу MasterPage, и поэтому вызов UpdateUserLogin() будет недействительным.

Однако вы можете проверить это так и сделать свой вызов условно:1004 *

if (Page.Master is MasterPage)
{
    ((MasterPage)Page.Master).UpdateUserLogin();
}

ОБНОВЛЕНИЕ Кажется, вы уже знали об этом, извините.Ваш вопрос по поводу ссылки не работает.Каково пространство имен вашего UserControl?

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