#jquery #asp.net-mvc #razor
#jquery #asp.net-mvc #бритва
Вопрос:
Я работаю над проектом MVC. У меня есть контейнер div, к которому я хочу добавить частичное представление. Я получаю сообщение об ошибке, потому что HTML-код моего частичного представления содержит возврат каретки.
JavaScript:
$("#containerOptions").html('@{Html.RenderPartial("_DropDownOptions", Model);}');
Частичный просмотр:
<div id="divOptions">
<label>I would like to browse by:</label>
@using (var dd = Html.Bootstrap().Begin(new DropDown("Select Option").Class("dropDownElement").Id("dropDownOption")))
{
@dd.Header("Otpions");
@dd.ActionLink("City", "#").Class("dropDownElement");
@dd.ActionLink("Zip", "#").Class("dropDownElement");
@dd.ActionLink("County", "#").Class("dropDownElement");
}
</div>
Я знаю, что мой html-код не является проблемой, потому что он работает в другом месте. Я также повторил проблему, просто вставив <p>Hi</p><p>Fred</p>
свой частичный вид, который работает.
Но
<p>Hi</p>
<p>Fred</p>
не работает.
Есть ли способ заставить вызов .html игнорировать возвраты каретки в моем документе? Я бы предпочел не удалять их, поскольку это значительно снижает читаемость.
Редактировать:
Я попытался выполнить замену строки, чтобы удалить новые строки, но это не сработало.
var s = '@{Html.RenderPartial("_DropDownOptions", Model);}'
var bob = s.replace(/[nr]/g, '');
$("#containerOptions").html(bob);
Комментарии:
1. Javascript не принимает многострочную строку. Вам нужно экранировать ваши новые строки или удалить их.
2. Хорошо…. Это как раз то, о чем я спрашивал, как это сделать… Я попытался выполнить замену символа новой строки, но либо сделал это неправильно, либо просто не работает в этой ситуации.
3. Может быть, вам следует показать нам свое регулярное выражение? Я могу помочь, если ваше регулярное выражение неверно, но ASP.net / бритва — это не мой опыт. Я не очень помогаю.
4. Отредактируйте, чтобы показать замену, которую я пробовал.
5. Не вводите HTML в строковые константы. У этого много проблем (как вы обнаруживаете). Попробуйте решение ниже.
Ответ №1:
Вместо того, чтобы вводить строковую константу HTML в код Javascript, введите свой view HTML в скрытый элемент на странице в виде HTML и ссылайтесь на это:
<script id="template" type="text/template">
@Html.Partial("_DropDownOptions", Model)
</script>
text/template
является неизвестным типом содержимого, поэтому просто игнорируется для рендеринга.
jQuery:
// This reparents the elements
$("#containerOptions").append( $('#template').children() );
или
// Slightly slower, but leaves the original intact
$("#containerOptions").html( $('#template').html() );
Это дает вам гораздо лучшую читаемость и гибкость. HTML в строках, как правило, является «плохой» идеей.
Комментарии:
1. Вау, очень аккуратное решение. Делает именно то, что я хотел. Спасибо.
2. Нет проблем. Я использую ту же технику для HTML-шаблонов, поскольку ее гораздо проще читать, чем HTML в строках.
3. OId ответ, но мне очень помог! Спасибо!
4. @Nsevens: это не возраст ответа… важно то, что в нем есть 🙂 Некоторые методы живут годами. Просто использовал это снова на прошлой неделе. Спасибо
5. @GoneCoding разве это не правда! 😉