Self-AJAX-обновление частичного представления / контроллера в ASP.Net MVC и дублирующем div

этот вопрос старый, но я думаю, что нашел лучшее решение для границы в регулярных выражениях с символами unicode. Используя XRegExp, вы можете реализовать допустимую границу \ b, расширяющую это

XRegExp('(?=^|$|[^\\p{L}])')

, результат имеет длину 4000+, но, похоже, работает довольно эффективно.

Некоторые объяснения: ( ? =) - это просмотр с нулевой длиной, который ищет начальную или конечную границу или небуквенный символ Юникода. Самое главное - это взгляд, потому что \ b ничего не захватывает: это просто правда или ложно.

11
задан 2 revs 30 September 2010 в 08:34
поделиться

3 ответа

Используете ли вы AjaxHelper.Form или jQuery. Если вы используете jQuery, пробовали ли вы использовать replaceWith () ? Используя AjaxHelper, используете ли вы AjaxOptions {InsertionMode = InsertionMode.Replace} ? Я думаю, что, используя любой из них, вы сможете заменить весь DIV результатами частичного представления.

3
ответ дан 3 December 2019 в 08:05
поделиться

Использование

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 к идентификатору контейнера.

Изменить: Я обновил код, чтобы представить точную ситуацию, которую вы описываете в своем вопросе.

3
ответ дан 3 December 2019 в 08:05
поделиться

Вам также следует попробовать 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>
1
ответ дан 3 December 2019 в 08:05
поделиться
Другие вопросы по тегам:

Похожие вопросы: