Редактор шаблонов Razor не любит мой синтаксис привязки атрибута Knockout

У меня есть привязка атрибута Knockout, которая отлично работает:

<a data-bind="attr: { href: 'Action?destination=' + '@Model.Property' + '&entityId=' + Id }">Select</a>

Однако подсветка синтаксиса в Visual Studio выдает ошибку «Незавершенная строковая константа», когда любое свойство модели вставляется в строку href.

Я поэкспериментировал с '@()' и '@:', но, похоже, ничего не порадовало редактора.


person David Montgomery    schedule 23.04.2013    source источник
comment
Правильно ли отображается код и работает ли он в браузере? Если да, то вас не должно волновать сообщение об ошибке VS... Razor intelisense все еще не на 100% верен. Кстати, какую версию VS вы используете? 2010? 2012? Vanilia или с Resharper/CodeRush/и т.д.?   -  person nemesv    schedule 24.04.2013
comment
@nemesv: я использую 2012 Update 2 vanilla. Код отображается правильно и отлично работает в нескольких браузерах. Я просто полагаю, что ошибка VS вызовет беспокойство у некоторых других наших программистов или разработчиков разметки...   -  person David Montgomery    schedule 24.04.2013
comment
Пробовали ли вы заранее присвоить целое href локальной переменной, а затем использовать ее для ввода значения, чтобы у вас не было одинарных кавычек?   -  person Kyeotic    schedule 23.07.2013
comment
Почему вы используете нокаут для чего-то, чего можно добиться с помощью обычной html-ссылки? (помощник Hmtl.ActionLink)   -  person Mahesh    schedule 07.09.2013


Ответы (2)


У меня была аналогичная проблема, когда я хотел передать URL-адреса действий контроллера (предоставленные экземпляром UrlHelper представления Razor) моим функциям модели представления, которые будут использоваться позже в вызовах jQuery AJAX.

Следующая разметка работает в браузере, но обеспечивает подсветку синтаксиса в Visual Studio:

<button data-bind="click: function (data) { someFunction(data, '@Url.Action("SomeAction", "SomeController")') }">Action!</button>

Подсветку синтаксиса можно отключить, изменив приведенное выше на следующее:

<button data-bind="@("click: function (data) { someFunction(data, '" + Url.Action("SomeAction", "SomeController") + "') }")">Action!</button>
person Todd L    schedule 22.04.2014

Почему бы просто не использовать обычный Html.ActionLink?

@Html.ActionLink("Action", "Select", new { destination = Model.Property, entityId = Model.Id });
person Mahesh    schedule 06.09.2013