Всякий раз, когда я пытался отобразить частичный вид на bootstrap modal, запрос ajax, который представляет частичный вид, вызывается несколько раз. Я делаю запрос ajax при нажатии кнопки, который находится в главном представлении.Запрос Ajax, называемый mutiple times in mvc
Main Вид: - Оказывая основной вид я вынесший частичный вид также как ниже
<div class="modal fade" id="surveyPreviewModal" data-backdrop="static" data-keyboard="false" tabindex="-1" role="dialog" aria-labelledby="surveyPreviewLabel" aria-hidden="true">
<div class="modal-lg modal-dialog">
<div class="modal-content" id="surveyPreviewContent">
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal" aria-hidden="true">
×
</button>
<h4 class="modal-title" id="surveyPreviewLabel">Survey Preview</h4>
</div>
<div class="modal-body" id="surveyPreviewBody">
@Html.Partial("_SurveyPreview",new LMS_TraineeSurveyPaginationViewModel())
</div>
</div>
</div>
</div>
и это кнопка, которая находится на главном экране, оказывающего частичный вид в модальном
<button id="btnSurveyPreview" class="btn btn-primary" data-toggle="modal" data-target="#surveyPreviewModal" data-surveyID="@ViewBag.SurveyID">
Survey Preview
</button>
На частичном изображении я написал нижеприведенный код. На bootstrap modal show
Событие Я звоню SurveyPreview(js function)
написан на частичном изображении.
@model LMS_TraineeSurveyPaginationViewModel
$(document).ready(function() {
$('#surveyPreviewModal').on('show.bs.modal', function (e) {
surveyID = $(e.relatedTarget).attr('data-surveyID');
SurveyPreview(@SurveyPageTypePageNumber.StartPage,null);
});
})
И SurveyPreview function
я сделать запрос Ajax следующего
function SurveyPreview(page,btnID) {
....Get SurveyID and page code.....
$.post('@Url.Action("SurveyPreview", "Survey")', { SurveyID : surveyID, page : page },
function (data) {
$('#surveyPreviewBody').html('');
$('#surveyPreviewBody').html(data);
SetProgressBar(page,'@(Model==null?0: Model.Pager.TotalPages)');
}).fail(function() {
alert("error in GetTraineeSurvey");
}).success(function() {
});
}
И от SurveyPreview методы контроллера Я возвращаю тот же частичный вид с моделью и добавлением результатов в модальное теле.
public PartialViewResult SurveyPreview(int SurveyID, int page)
{
--- some code--
return PartialView("_SurveyPreview", viewModel);
}
Позволяет я нажал на кнопку в первый раз, то модальный становится открыт и после закрытия и повторного открытия его запрос Аякса сделал дважды, а затем снова закрыть и запрос на повторное открытие Аякса сделал трижды. Каждый раз, когда счетчик увеличивается,
Также у меня есть кнопки Next/Prev на частичном представлении, которое отображает один и тот же частичный вид.
Правильная последовательность событий происходит здесь? Или я пропустил что-то здесь?
Любая помощь по этому признанию!
@Daring Димитров , причина включения javascript в частичное представление, для повторного использования одного и того же частичного представления на других представлениях. Поэтому мне не нужно писать его на каждом представлении. Я не понял, как привязать обработчики событий нескольких кликов к кнопке, поскольку это на главном экране? – Rohit
Да, но вы написали javascript-код, который подписывается на событие click этой кнопки. И вы разместили этот код javascript внутри частичного. И когда вы перезагружаете частичное использование AJAX, этот код javascript выполняется снова, и он прикрепляет к клику еще один обработчик кликов. И так далее. Также вы можете повторно использовать частичное, просто чтобы javascript не размещался внутри него. Очень плохая практика поместить javascript-код в частичные представления. Также, если вы хотите повторно использовать javascript, просто поместите его в отдельный файл js. Затем просто включите этот файл js в каждое представление, которое ему нужно. –
ok, так что использование данных-цели и данных модальное на кнопке будет рассматривать его как onclick событие кнопки? – Rohit