Переносимые области MVCContrib не работают из HtmlExtensions, MVC 3

Я только что реализовал функцию Portable Area MVCContrib, и она отлично работает. Я могу открыть его, используя: http://localhost/projectname/portableAreaName, но эта переносимая область не работает, если я визуализирую ее с помощью метода расширения HtmlHelper, например:

public static void  RenderHtmlWidget(this HtmlHelper Html)
{
        Html.RenderAction("Index", "HtmlWidget", new {area = "HtmlWidget"});
}

И вызов вспомогательного метода в представлении как таковом:

@using Project.Widgets.HtmlWidget;
@{Html.RenderHtmlWidget();}

Я получаю сообщение об ошибке: Представление "Индекс" или его мастер не найдены, или механизм просмотра не поддерживает искомые местоположения. В списке возможных местоположений нет ~/areas/... определенных . Но я могу успешно отобразить свой HtmlWidget с помощью той же строки кода в представлении:

@{Html.RenderAction("Index", "HtmlWidget", new { area = "HtmlWidget" });}

Что я делаю неправильно и как мне правильно использовать расширения HtmlHelper с функцией переносимых областей MVCContrib?


person flamedmg    schedule 25.04.2011    source источник


Ответы (1)


Есть несколько вещей, которые могут быть причиной этого.

  • В вызывающем/родительском проекте, где вы используете вспомогательный метод для вызова переносимой области, есть ли у вас файл Web.config в папке /Areas/? Если нет, вы должны скопировать файл Web.config, найденный в папке /Views/ того же проекта, и просто поместить новую копию в папку /Areas/.
  • В файле класса Registration в вашем проекте переносимой области после вызова MapRoute в методе «RegisterArea» вы вызываете «RegisterAreaEmbeddedResources();»?
  • Сделано ли каждое представление в вашем проекте портативной области встроенным ресурсом, а не контентом? Выберите представление в обозревателе решений и нажмите F4, для параметра «Действие сборки» должно быть установлено значение «Встроенный ресурс», но по умолчанию установлено значение «Содержимое».
  • Также необходимо убедиться, что переносной проект и проект-потребитель ссылаются на одну и ту же версию MvcContrib, но используют одну и ту же версию ASP.NET MVC. Если на вашу область ссылаются в нескольких проектах, каждый из которых основан на другой версии MVC (маловероятно, но возможно в зависимости от ситуации), ваша область должна использовать ту версию MVC, которую использует потребляющий проект.
  • Я бы также предложил использовать отладчик маршрутизации .NET Фила Хаака - это один файл DLL, на который вы ссылаетесь в приложении-потребителе, и добавляете одну строку в свой ApplicationStart() в вашем Global.asax.cs. Это становится невероятно полезным для определения того, правильно ли зарегистрирована ваша портативная область в базовом проекте, и помогает вам перейти к делу.
person Mattygabe    schedule 22.07.2011