Проблема в том, что Razor создан для вывода HTML, а не Javascript. По умолчанию он закодирует все ваши строки с помощью HTML-сущностей, которые не подходят для строк Javascript.
Вы могли бы использовать @Html.Raw(Model.YourString)
, но это создаст вам другие проблемы, такие как невозможность избежать кавычек и т. Д. (Стандартный вывод Razor делает это "случайно").
Если вы используете .NET 4.0 / MVC 3, вы можете использовать AjaxHelper's JavaScriptStringEncode
, который возвращает IHtmlString
(что означает, что Razor не будет кодировать его сущностью), но также выполняет надлежащее специфичное для Javascript экранирование ( включая разрывы строк в исходной строке, которые стандартная кодировка Razor не «исправит»):
$("#FirstName").Watermark(
"@Ajax.JavaScriptStringEncode(Resources.ApplicantGivenNameWatermark")");
(Да, это получается довольно многословно ... но имеет преимущество в том, что исправляет проблему в корне, вместо того, чтобы обходить ее с помощью jQuery - конечно, вы можете создать помощника с коротким именем, которое называется JavaScriptStringEncode
.
Обратите внимание, что это также статический метод в HttpUtility
- проще вызывать из пользовательского помощника, чем создавать экземпляр AjaxHelper
, но обратите внимание, что в отличие от AjaxHelper
, метод в HttpUtility
возвращает простую строку, поэтому вам нужно будет обернуть его в HtmlString
, чтобы избежать кодирования HTML.