этот вопрос старый, но я думаю, что нашел лучшее решение для границы в регулярных выражениях с символами unicode. Используя XRegExp, вы можете реализовать допустимую границу \ b, расширяющую это
XRegExp('(?=^|$|[^\\p{L}])')
, результат имеет длину 4000+, но, похоже, работает довольно эффективно.
Некоторые объяснения: ( ? =) - это просмотр с нулевой длиной, который ищет начальную или конечную границу или небуквенный символ Юникода. Самое главное - это взгляд, потому что \ b ничего не захватывает: это просто правда или ложно.
Используете ли вы AjaxHelper.Form или jQuery. Если вы используете jQuery, пробовали ли вы использовать replaceWith () ? Используя AjaxHelper, используете ли вы AjaxOptions {InsertionMode = InsertionMode.Replace}
? Я думаю, что, используя любой из них, вы сможете заменить весь DIV результатами частичного представления.
Использование
AjaxOptions { UpdateTargetId = "myDiv", InsertionMode = InsertionMode.Replace }
должно заменить все содержимое элемента '#myDiv', как говорит tvanfosson. Ваша проблема в том, где находится "#myDiv". Вот пример:
<div id="myDiv">
<% Html.RenderPartial("MyPartialView"); %>
</div>
где MyPartialView:
<div id="comments">
<% using (Ajax.BeginForm(new AjaxOptions() { UpdateTargetId = "myDiv", InsertionMode = InsertionMode.Replace } )) {%>
...
<input type="submit" value="Submit comment" />
<% } %>
</div>
Если вы включите div '#myDiv' внутри частичного представления, он будет отображаться сразу после получения ответа (вместе с его содержимым), а затем его содержимое будет заменено с ответом, который является тем же частичным представлением (включая его собственный div '#myDiv'), и поэтому вы всегда получаете 2 вложенных div.
Вы всегда должны использовать контейнер для своих частичных представлений, а затем устанавливать UpdateTargetId к идентификатору контейнера.
Изменить: Я обновил код, чтобы представить точную ситуацию, которую вы описываете в своем вопросе.
Вам также следует попробовать jQuery (из моего ответа на MS MVC формирует методы AJAXifying ):
<script type="text/javascript">
$(document).ready(function() {
ajaxify($('div#comments'));
});
function ajaxify(divWithForm) {
var form = $('form', divWithForm);
$(':submit', form).click(function (event) {
event.preventDefault();
$.post(form.attr('action'), form.serialize(),
function(data, status) {
if(status == 'success') {
var newDivWithForm = $(data);
ajaxify(newDivWithForm);
divWithForm.after(newDivWithForm).remove();
}
}
);
});
}
</script>