2015-01-09 1 views
0

Для C# MVC 5 приложения мы имеем следующий частичный вид:Почему Resharper ожидает закрытие скобки здесь?

@using some.using.here 
@using some.using.here 
@using some.using.here 

@{ 
    var treeItem = TempData["SELECTED_TREEITEM"] as ITreeItem; 
    string path = treeItem.GetIdPath(TempData.GetParentId()); 
    User user = Session["somesessionkey"] as User; 
} 

<!-- Selected item from URL --> 

@if (treeItem != null) 
{ 
    <input type="hidden" id="routeData" data-key="@treeItem.Key" data-treepath="@path" data-area="@TempData["SELECTED_AREA"]" data-mode="@TempData["SELECTED_MODE"]"> 
} 
<input type="hidden" id="defaultAsset" data-default="@(user != null ? (user.DefaultAsset != null ? methodcall(value).ToString() : string.Empty) : string.Empty)" /> 
<input type="hidden" id="newPeriodHrs" data-newperiodhrs="@(user != null ? user.NewPeriodHrs : 48)" /> 

Однако, независимо от того, что я делаю, Resharper не продолжает жаловаться со следующим сообщением:

Views \ Shared \ _RouteData. cshtml: 18 Ожидаемая закрывающая скобка

Чтобы сохранить вас от подсчета, строка 18 находится в конце файла.

В отличие от того, что может предложить Resharper, весь проект компилируется и работает отлично. Но есть ли еще какой-то синтаксический вопрос, который мне не хватает? Или в этом случае Resharper просто ошибается? Я запускаю Resharper 8.2 (выпуск C#).

(пожалуйста, простите мою бедную попытку удаления конфиденциальной информации из кода, я оставил все фигурные скобки и такие нетронутые)

+0

компилировать ли код? Вы можете просмотреть страницу? Отсутствие '}' в Razor приведет к YSOD. Если вы можете просмотреть страницу, Resharper ошибочен. Если вы этого не сделаете, вы, вероятно, увидите аналогичную ошибку в сообщении об исключении –

+0

Ставлю, что эта '' @TempData ["SELECTED_AREA"] "' вызывает проблему - двойные кавычки внутри строки –

+0

Код компилируется и работает отлично (как уже описано выше). '' @TempData ["SELECTED_AREA"] "' на самом деле работает просто отлично, не вызывает ошибок на множестве других страниц, на которых он используется. – Vincent

ответ

1

Оказывается, решение действительно подлое, один слэш отсутствует в этой части:

@if (treeItem != null) 
{ 
    <input type="hidden" id="routeData" data-key="@treeItem.Key" data-treepath="@path" data-area="@TempData["SELECTED_AREA"]" data-mode="@TempData["SELECTED_MODE"]"> 
} 

Он должен выглядеть следующим образом: данные режима = "@ TempData [" SELECTED_MODE "]" />

+0

Он по-прежнему является ошибкой Resharper, поскольку он путает допустимый тег HTML с кодом на стороне сервера. Элемент 'input' является элементом void и не требует косой черты в HTML5. Возможно, это исправлено в R9 –