JQuery. HTML и исключение бритвы

0

Здесь у меня есть частичный вид, и я пытаюсь вставить еще один частичный вид в div # Комментарии, кроме исключения Google Chrome

@{
  Layout = null;
  var data = Html.Partial("Partial/Comments", Model).ToHtmlString();
}
<script>
var c = $("#Comments");
c.empty();@
c.html("@data"); // here is exception
</script>

Вот код, отображаемый в данных

<form action="/Quest/Comment" class="form-horizontal" id="CommentAddForm" method="post">            <fieldset>
            <input id="qid" name="qid" type="hidden" value="11" />
                <span class="field-validation-valid" data-valmsg-for="body" data-valmsg-replace="true"></span>
            <div><input id="body" name="body" type="text" value="write here" /></div>


            </fieldset>
</form>        <button id="CommentAdd">
                        Add Comment
                    </button>

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

ОБНОВЛЕНО Вот код, улавливаемый отладчиком google chrome

  <div ></div>
  success    <script>
  var c = $("#Comments");
  c.empty();
  c.html("
  &lt;form action=&quot;/Quest/Comment&quot; class=&quot;form-horizontal&quot;id=&quot;CommentAddForm&quot; method=&quot;post&quot;&gt;            &lt;fieldset&gt;
  &lt;input id=&quot;qid&quot; name=&quot;qid&quot; type=&quot;hidden&quot;value=&quot;11&quot; /&gt;
            &lt;span class=&quot;field-validation-valid&quot; data-valmsg-for=&quot;body&quot; data-valmsg-replace=&quot;true&quot;&gt;&lt;/span&gt;
        &lt;div&gt; &lt;input id=&quot;body&quot; name=&quot;body&quot; type=&quot;text&quot; value=&quot;write here&quot; /&gt;&lt;/div&gt;
        &lt;/fieldset&gt;
 &lt;/form&gt;        &lt;button id=&quot;CommentAdd&quot;&gt;
                    Add Comment
                &lt;/button&gt;
Теги:
razor
asp.net-mvc

2 ответа

1

Вы вставляете произвольный текст в строковый литерал Javascript.
Если этот текст содержит специальные символы (кавычки или новые строки или обратные косые черты), он не будет действительным строковым литералом.
Это дает вам синтаксическую ошибку Javascript.

Razor немного ухудшает HTML-кодирование текста.

Вам нужно Javascript-кодировать текст так, чтобы он всегда был корректным строковым литералом.
Вы можете сделать это, вызвав HttpUtility.JavaScriptStringEncode().

Вам также необходимо предотвратить Razor из HTML-экранирования полученного текста (поскольку исходный код Javascript не является HTML), вызывая Html.Raw().

0
 c.html('@HttpUtility.HtmlDecode(data)');

Однако вы можете столкнуться с многострочными проблемами. Вы можете попробовать выполнить загрузку в частичном виде через AJAX:

 c.load('@Url.Content("Partial/Comments")');
  • 0
    HtmlDecode получает только два параметра и не возвращает ни одной строки. Кроме того, @ Url.Content («Частично / Комментарии») не использует мой вид с моделью, которую я отправляю здесь Html.Partial("Partial/Comments", Model)
  • 0
    HtmlDecode имеет эту перегрузку, где он принимает одну строку и возвращает строку: public static string HtmlDecode(string s) . Я пропустил передачу модели в частичный вид ... Вам просто нужен идентификатор вопроса? У нас есть другие способы снять шкуру с этой кошки.
Показать ещё 2 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню