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. Это становится невероятно полезным при определении того, правильно ли регистрируется ваша портативная область в базовом проекте, и помогает вам приступить к поиску.