экранирование параметров javascript в одинарных кавычках в Razor’s Html.Raw

#javascript #asp.net-mvc-4 #razor #escaping

#javascript #asp.net-mvc-4 #razor #экранирование

Вопрос:

итак, как я могу процитировать параметры функции java script в Html Razor.Помощник Raw? Похоже, что для того, чтобы иметь возможность вызывать определенную функцию js, мне нужно, чтобы параметры были заключены в одинарные кавычки..

при выводе неэкранированных параметров:

 @Html.Raw("<a onClick='copyRowValues("   name   ", "   localTable   ", "   sqlName   ");' > "   name   " </a>");
  

переводится как:

 <a onclick="copyRowValues(ASN, ASN, ASN_RECORD_ID);">
  

это выглядит неплохо, но когда эти параметры для функции copyRowValues(…) js не заключены в одинарные кавычки, функция не вызывается.
итак, когда я добавляю одинарные кавычки, подобные этому:

 @Html.Raw("<a onClick='copyRowValues('"   name   "', '"   localTable   "', '"   sqlName   "');' > "   name   " </a>");
  

это приводит к:

 <a 'asn_record_id');'="" 'asn',="" asn',="" onclick="copyRowValues(">
  

экранирование с помощью @ или просто не сработало для меня.
Спасибо за простое решение!

Комментарии:

1. Есть ли причина, по которой вы используете raw helper вместо <a> самого a? У меня возникли проблемы с представлением сценария, в котором это не сработало бы.

Ответ №1:

Работает ли использование двойных кавычек? например

 @Html.Raw("<a onClick=""copyRowValues('"   name   "', '"   localTable   "', '"   sqlName   "');"" > "   name   " </a>");
  

Комментарии:

1. нет, это синтаксически плохо, и этот подход я уже пробовал, как вы можете видеть в моем вопросе.

Ответ №2:

Почему бы не решить без Html.Raw()? Использовать его для генерации выходного HTML-кода как-то устаревший подход.

Попробуйте что-то вроде этого:

 <a onclick="copyRowValues(@name, @localTable, @sqlName)">@name</a>
  

Надеюсь, это поможет.

Комментарии:

1. Однако вам все равно понадобятся одинарные кавычки, например: copyRowValues('@name', '@localTable', '@sqlName')

2. @NickCraver на самом деле это переводится как: <a '@sqlname');'="" '@localtable',="" @name',="" onclick="copyRowValues("></a>