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();}

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

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

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

1 ответ

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

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