ASP.NET MVC Views не видит классов после масштабного рефакторинга - PullRequest
0 голосов
/ 10 апреля 2009

Мой проект прошел изменение имени, что привело к использованию ReSharper для изменения имен пространств имен во всем решении. Все компилируется просто отлично, но мои представления ASP.NET MVC больше не видят никаких унаследованных классов. Я изменил импорт пространства имен в web.config и всё такое, и я уверен, что классы существуют. Они работают, если я ссылаюсь на полное имя класса (Name.Space.ClassName).

Почему это происходит и как я могу это исправить?

РЕДАКТИРОВАТЬ: Подробнее:

До рефакторинга у меня была пользовательская страница просмотра, главная страница и классы управления пользователями:

SalesWeb.Mvc.Views.SalesWebViewPage
SalesWeb.Mvc.Views.SalesWebMasterPage
SalesWeb.Mvc.Views.SalesWebUserControl

После рефакторинга:

Wasabi.SalesPortal.Mvc.Views.SalesPortalViewPage
Wasabi.SalesPortal.Mvc.Views.SalesPortalMasterPage
Wasabi.SalesPortal.Mvc.Views.SalesPortalUserControl

В web.config, перед рефакторингом:

<configuration>
    <system.web>
        ...
        <pages ...>
            ...
            <namespaces>
                ...
                <add namespace="SalesWeb.Mvc.Views" />
            </namespaces>
        </pages>
    </system.web>
</configuration>

После того, как:

<configuration>
    <system.web>
        ...
        <pages ...>
            ...
            <namespaces>
                ...
                <add namespace="Wasabi.SalesPortal.Mvc.Views" />
            </namespaces>
        </pages>
    </system.web>
</configuration>

Я также изменил атрибут Inherits на каждом из моих представлений, главных страниц и пользовательских элементов управления. Однако при попытке посетить приложение MVC он жалуется, что SalesPortalMasterPage не может быть найден, хотя я абсолютно уверен, что оно существует, потому что у меня нет проблем при обращении к нему как к Wasabi .SalesPortal.Mvc.Views.SalesPortalMasterPage .

Ответы [ 2 ]

1 голос
/ 23 апреля 2009

Попробуйте почистить каталог bin и перестроить. Иногда старая dll задерживается в папке bin и портит ваши ссылки / пространство имен.

0 голосов
/ 10 апреля 2009

У меня похожие проблемы, когда пространство имен отличается от пространства имен, в котором хранится представление. Моя проблема в том, что когда я использую строго типизированное представление, которое ссылается на класс, не входящий в пространство имен веб-сайта, оно не распознает его, если оно определено в самом представлении. Мое решение состоит в том, чтобы создать файл codebehind для каждого представления и определить там класс (так, чтобы он находился в том же пространстве имен) и иметь представление, наследуемое от класса codebehind. Я понимаю, что это старый способ сделать это (и не рекомендуется), но это единственное, что я нашел, что работает. Я наткнулся на это, потому что представления, которые я создал с версиями до того, как кодовая часть перестала создаваться по умолчанию, все еще работали, в то время как представления, созданные без кодовой области, не могли скомпилироваться. Возможно, вы захотите попробовать это, чтобы увидеть, решит ли это вашу проблему.

Я сообщил об этой проблеме на Codeplex, кстати.

РЕДАКТИРОВАТЬ : Исходя из вашего комментария, вы можете не увидеть ту же проблему, что и я. Возможно, вы захотите проверить, обновлено ли имя сборки (и пространство имен по умолчанию) в вашем проекте. Возможно, проблема в том, что имя сборки не соответствует вашему пространству имен.

...