#jquery #asp.net-mvc #begincollectionitem
#jquery ( jquery ) #asp.net-mvc #элемент begincollectionitem
Вопрос:
Я использую BeginCollectionItem для динамического добавления элементов в список. Если я попытаюсь щелкнуть по недавно добавленной строке, приложение немедленно остановится и перенаправит меня на страницу входа в систему. Если я удаляю уже существующий элемент, он удаляет его из базы данных, затем удаляет из пользовательского интерфейса, а затем перенаправляет меня на страницу входа в систему. Если элемент добавлен недавно, он даже не запускает код в delete.onClick при всех других действиях, но оба они в конечном итоге перенаправляют меня на экран входа в систему.
У меня была аналогичная проблема при попытке добавить div, и мне сказали добавить:
e.preventDefault();
e.stopImmediatePropagation();
Я попробовал это, но это не помешало моему приложению остановиться и перенаправить его на страницу входа в систему. Вот мой код удаления:
$("a.deleteRow").on("click", function (e) {
var container = $(this).closest('.editorRow');
var id = container.data('id');
var $t = $(this);
$.ajax({
type: "POST",
url: "@Url.Action("Delete","Request", new { area = "" })",
data: { CommentId: id },
success: function (e) {
$t.parents("div.editorRow:first").remove();
e.preventDefault();
e.stopImmediatePropagation();
}
})
return false;
});
Вот частичный вид:
@using (Html.BeginCollectionItem("Comments"))
{
<div class="row editorRow" data-id="@Model.Id" style="padding-bottom:10px">
@Html.HiddenFor(x => x.Id)
<div class="col-xl-2">
@if (Model.CreatorName == "" || Model.CreatorName == null)
{
Html.DisplayFor(x => x.CreatorName, (string)@ViewBag.UserName);
}
else
{
@Html.DisplayFor(x => x.CreatorName)
}
</div>
<div class="col-xl-8">
@Html.TextAreaFor(x => x.Comment, new { @class = "form-control" })
</div>
<div class="col-xl-2">
<a href="#" class="deleteRow">delete</a>
</div>
</div>
}
вот код удаления в контроллере:
public ActionResult Delete(int CommentId)
{
service.DeleteComment(CommentId);
return Content("" CommentId);
}
Обновить:
После ввода кода удаления в document.ready часть ajax, удаляющая существующую строку, теперь работает нормально. Однако попытка добавить и удалить строку без предварительного сохранения этой строки по-прежнему приводит к перенаправлению. Новый код удаления, который теперь работает с «существующей» строкой, выглядит следующим образом:
$(document).ready(function () {
$("a.deleteRow").on("click", function (e) {
var container = $(this).closest('.editorRow');
var id = container.data('id');
var $t = $(this);
$.ajax({
type: "POST",
url: "@Url.Action("Delete","Request", new { area = "" })",
data: { CommentId: id },
success: function (e) {
$t.parents("div.editorRow:first").remove();
return false;
}
})
return false;
});
});
Я новичок в jQuery и пытаюсь понять, а также заставить мой проект работать.
Комментарии:
1. Я думаю, что перенаправление на страницу входа в систему не связано с вашим кодом jquery. проверьте свой сервер и метод аутентификации.
2. @Махди Фархани, я почти уверен, что это как и раньше связано с jQuery. Я переместил код в $(document). готово (функция (){}) и теперь код публикации, который публикует существующую кампанию, работает нормально, теперь это просто недавно добавленный div. Но спасибо за предложение.
3. В вашем коде нет перенаправления на стороне клиента (по крайней мере, в этом коде), поэтому, возможно, у вас есть другой код, который не показан в этом вопросе, или, как я уже говорил, ваш серверный код перенаправляет запрос на страницу входа.
4. Кроме того, возможно, произошло исключение, которое обрабатывается вашей конфигурацией, и отображается страница входа в систему.
5. @Mahdi Farhani, как я уже сказал, ранее у меня был код «добавления», который перенаправлял на login, потому что я не включил код stoppropogation, и теперь это частично работает только потому, что я переместил его в document.ready. У меня нет НИЧЕГО в моем ActionResult, что направляло бы обратно на страницу входа в систему. Это то, что он делает при ошибке. Однако, поскольку он не будет проходить через код удаления jQuery, я не могу сказать, в чем проблема.
Ответ №1:
Глядя на код, я не вижу, что это перенаправление связано с jquery. Можете ли вы взглянуть на действие RequestController и удалить. Скорее всего, ваше действие удаления в контроллере выполняет перенаправление в этом случае после того, как оно удалило запись из базы данных.