Вызов метода на главной странице из пользовательского контроля - PullRequest
0 голосов
/ 14 февраля 2019

Я создаю приложение для веб-форм, где я использую JS lib Toastr для отображения сообщений пользователю.Это прекрасно работает ... для большинства частей.Мое приложение спроектировано так:

Мастер - Вложенный мастер - Страница - Пользовательский контроль

Я реализовал вызов Toastr в Мастер:

public void ShowToastr(Page page, string message, string title, string type = "info")
{
    ScriptManager.RegisterStartupScript(page, page.GetType(), "toastr_message",
        $"toastr.{type.ToLower()}('{message}', '{title}');", addScriptTags: true);
}

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

файл Admin.master

<%@ MasterType VirtualPath="~/Areas/Shared/Site.Master" %>

Страница SystemSettings.aspx

<%@ MasterType VirtualPath="~/Areas/Administration/Admin.Master" %>

UserCntrol находится на странице SystemSettings.aspx

Затем я вызываю метод SiteMaster, подобный этому, из пользовательского элемента управления

((SystemSettings)this.Page).Master.Master.ShowToastr(this.Page, "Property successfully updated.", "Success", $"{nameof(ToastrTypeEnum.Success)}");

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

Я пробовал несколько вещей после поиска в Интернете.

(this.Page.Master as SiteMaster)?.ShowToastr(this.Page, "Property successfully updated.", "Success", $"{nameof(ToastrTypeEnum.Success)}");

также

SiteMaster _m = (SiteMaster)Page.Master;


_m.ShowToastr(this.Page, "Unable to save new property", "Error", $"{nameof(ToastrTypeEnum.Error)}");

Любой, у кого есть предложения о том, какчтобы решить это ??

1 Ответ

0 голосов
/ 14 февраля 2019

Я не совсем уверен, что это решит вашу проблему, потому что возникающая ошибка использования Control в другом месте не в вашем вопросе.Но почему бы не сделать ShowToastr статическим методом в отдельном классе, а не Мастером?Таким образом, вам не нужно отправлять Page методу и / или разыгрывать Мастера.

namespace MyNameSpace
{
    public class Class1
    {
        public static void howToastr(string message, string title, string type = "info")
        {
            Page page = HttpContext.Current.CurrentHandler as Page;
            ScriptManager.RegisterStartupScript(page, page.GetType(), "toastr_message", $"toastr.{type.ToLower()}('{message}', '{title}');", addScriptTags: true);
        }
    }
}
...