Resharper не может разрешить частичное представление внутри мастер-страницы

Я обновил ReSharper 7 на vs2012 pro до ReSharper 8.1 на vs2013 pro, и теперь ReSharper предупреждает, что многие частичные представления не могут быть разрешены. Кажется, это происходит только:

  • На мастер-страницах ASP (т. е. не в бритве)
  • Когда партиал .ascx находится в той же папке контроллера, что и партиал

Например. Home.Master, расположенный в ~/Views/Home/Home.Master отображает UserProfile.ascx, расположенный в ~/Views/Home/UserProfile.ascx. И <%: Html.RenderPartial("UserProfile") %>, и <%: Html.RenderPartial("~/Views/Home/UserProfile.ascx"%> помечены ReSharper как недействительные.

Кроме того, общие партиалы в папке ~/views/shared, похоже, нормально подбираются, когда я ссылаюсь только по имени:

RenderPartial по имени представления работает правильно

Однако ссылка на представление по пути не работает:

введите здесь описание изображения

(Обратите внимание. Оба изображения сделаны внутри Home.Master, в ~/Views/Home)

Когда я запускаю приложение, партиалы работают правильно, так что это похоже на изменение в ReSharper 8.1. Могу ли я что-нибудь сделать, чтобы исправить это?


person berkeleybross    schedule 04.02.2014    source источник
comment
Похоже, это хороший вопрос для команды решарпера, а не для StackOverflow.   -  person Brad Christie    schedule 05.02.2014
comment
В разделах справки по переполнению стека конкретно упоминаются вопросы, которые охватывают программные инструменты, обычно используемые программистами. Хотя я думаю, что это ошибка ReSharper, я надеюсь, что на самом деле это что-то, что я делаю неправильно, поэтому спрашиваю о переполнении стека   -  person berkeleybross    schedule 05.02.2014
comment
У меня похожая проблема, но для меня это только на страницах Razor. Еще больше беспокоит то, что на форумах JetBrain об этом ничего не говорится. Если найду решение, отпишусь здесь.   -  person BJury    schedule 12.02.2014
comment
Его легко воспроизвести в чистом проекте, поэтому я отправил его в JetBrains как ошибку.   -  person BJury    schedule 12.02.2014


Ответы (3)


Это ошибка в ReSharper.

На данный момент лучше всего настроить его на игнорирование ошибок этого типа.

Вы можете сделать это, выбрав «параметры проверки» из «красной лампочки» с левой стороны и установив для него другой параметр. Надеюсь, это будет исправлено в ближайшее время!

Изменить: см. этот билет для проблемы. http://youtrack.jetbrains.com/issue/RSRP-395642

person BJury    schedule 13.02.2014
comment
Через 5 лет, похоже, это будет исправлено в следующей версии! (2018.2) - person BJury; 05.06.2018

Есть более простое исправление, которое я нашел, используя относительные ссылки. Итак, в моем случае у меня было представление в другом проекте (и если вы попытаетесь выйти за пределы текущего проекта, не начав с косой черты «/», вы получите предупреждение типа это. Для вашей проблемы измените строку, которая гласит

<%Html.RenderPartial("UserProfile")%>

to

<%Html.RenderPartial("../../Views/Home/UserProfile")%>

or

<%Html.Partial("../../Views/Home/UserProfile.cshtml")%>

Не уверен, что это точный путь в вашем решении, но, надеюсь, вы понимаете, о чем я говорю - вы не можете использовать символ тильды (~). Вы должны использовать символ навигации HTML. Очевидно, не идеально, но я осмелюсь сказать, что это лучше, чем изменение правил проверки.

Кроме того, если вам нужно удалить проверку, просто закомментируйте ее, добавив строку

// ReSharper disable once Mvc.PartialViewNotResolved
... // code goes here

or

// ReSharper disable Mvc.PartialViewNotResolved
... // code goes here 
// ReSharper restore once Mvc.PartialViewNotResolved
person csharpforevermore    schedule 25.11.2014
comment
но таким образом у вас будет много головной боли, если вы когда-нибудь решите переместить что-то, поскольку ваша конфигурация пути находится не в одном месте, а разбросана по всем (частичным) представлениям - person Mladen B.; 05.01.2018

Я получил эту ошибку сегодня от ReSharper 2018.2.3, когда сделал это:

@Html.Partial("_StatusMessage", Model.StatusMessage)

Я также заметил предупреждение от самого метода IHtmlHelper.Partial:

Использование IHtmlHelper.Partial может привести к взаимоблокировкам приложения. Рассмотрите возможность использования вспомогательной функции тега ‹partial› или IHtmlHelper.PartialAsync.

Поэтому я изменил код на:

<partial name="_StatusMessage" model="Model.StatusMessage" />

Это исправило это для меня.

person crgolden    schedule 17.11.2018