asp.net MVC 3 Ошибка раскладки бритвы - PullRequest
0 голосов
/ 17 декабря 2011

В моем приложении asp.net MVC 3 у меня есть вложенные макеты. Я перешел по следующей ссылке:

http://blogs.msdn.com/b/marcinon/archive/2010/12/15/razor-nested-layouts-and-redefined-sections.aspx

Моя основная страница макета - это_MasterLayout.cshtml, а затем вложенная страница макета _fullLayout.cshtml. В _fullLayout.cshtml у меня есть:

@this.RedefineSection("BodyTitle")
@this.RedefineSection("Showcase")

но я вхожу в эти строки. Ошибка:

Ошибка компиляции

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

Сообщение об ошибке компилятора: CS1928: «ASP._Page_Views_Shared__fullLayout_cshtml» не содержит определения для «RedefineSection» и лучшая перегрузка метода расширения «SectionExtensions.RedefineSection (System.Web.WebPages.WebPageBase, string)» некоторые 1015 *

Ошибка источника:

Строка 9:
Строка 10:} Строка 11: @ this.RedefineSection ("BodyTitle") Строка 12: @ this.RedefineSection («Витрина») Строка 13: @RenderBody ()

Мои вспомогательные методы определены следующим образом:

public static class SectionExtensions
{

    private static readonly object _o = new object();

    public static HelperResult RenderSection(this WebPageBase page, string sectionName, Func<object, HelperResult> defaultContent)
    {
        if (page.IsSectionDefined(sectionName))
            return page.RenderSection(sectionName);
        else
            return defaultContent(_o);
    }

    public static HelperResult RedefineSection(this WebPageBase page, string sectionName)
    {
        return RedefineSection(page, sectionName, defaultContent: null);
    }

    public static HelperResult RedefineSection(this WebPageBase page, string sectionName, Func<object, HelperResult> defaultContent)
    {
        if (page.IsSectionDefined(sectionName))
            page.DefineSection(sectionName, () => page.Write(page.RenderSection(sectionName)));
        else if (defaultContent != null)
            page.DefineSection(sectionName, () => page.Write(defaultContent(_o)));
        return new HelperResult(_ => { });
    }

}

Пожалуйста, предложите решение.

С уважением, Асиф Хамид

Ответы [ 2 ]

0 голосов
/ 17 декабря 2011

Помощник RedefineSection содержит два или более аргумента

RedefineSection(this WebPageBase page, string sectionName)

но вы передаете только один на ваш взгляд

@this.RedefineSection("BodyTitle")
@this.RedefineSection("Showcase")

Согласно

http://blogs.msdn.com/b/marcinon/archive/2010/12/15/razor-nested-layouts-and-redefined-sections.aspx

Вы должны положить что-то

@this.RedefineSection("TitleSection",
                  @<h1>Default SubLayout title</h1>)
0 голосов
/ 17 декабря 2011

Следующий шаг для решения вашей проблемы 1. Получите пространство имен вашего класса "SectionExtensions".2. На странице макета, где вы используете RedefineSection, импортируйте это пространство имен вверху страницы, используя

@, используя ваше пространство имен;

Спасибо.

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