У меня есть окно пользовательского интерфейса Kendo, которое включает в себя форму ajax. Проблема, с которой я сталкиваюсь, заключается в том, что после успешного POST, и я закрываю окно, я снова открываю окно для повторного использования, но в следующий раз я отправлю форму, которая будет POST дважды, и так далее. Если я отправлю в третий раз, он будет POST три раза и т. Д.Я хочу повторно использовать окно Kendo, которое включает ajax-форму
Я уже пробовал использовать функцию destroy(), чтобы полностью удалить окно из DOM, а затем перестроить его через jQuery, но с тем же эффектом. Я также пытался очистить содержимое окна до загрузки его кодом разметки.
Я читал documentation от Telerik, и они предлагают разместить UpdateTargetId вне формы, я также пробовал это с таким же эффектом. Я знаю, что чего-то не хватает, и я не могу его точно определить.
Как следует использовать окно Kendo с формой в виде окна многократного использования (без публикации того же номера, что и я, окно)?
Моя Аякса форма внутри окна:
//abbreviated
<script src="@Url.Content("~/Scripts/jquery.validate.min.js")"></script>
<script src="@Url.Content("~/Scripts/jquery.validate.unobtrusive.min.js")"></script>
<script src="@Url.Content("~/Scripts/jquery.unobtrusive-ajax.min.js")"></script>
//abbreviated
<div id="paymentFormId">
@using (Ajax.BeginForm("action", "controller", new { id = id }, new AjaxOptions
{
HttpMethod = "POST",
UpdateTargetId = "paymentFormId",
InsertionMode = InsertionMode.Replace,
LoadingElementId = "loader"
}, new { id = "payment-form" }))
{
@Html.Partial("PaymentForm", new PaymentForm())
}
</div>
//abbreviated
Мой PaymentForm разметки:
//abbreviated
//bunch of text fields to submit
//abbreviated
<button type="submit" class="k-button">Submit</button>
<button onclick="closeWindow()" class="k-button">Close</button>
Моя декларация Окно:
@(Html.Kendo().Window()
.Name("Window")
.Title("My Win")
.Content("Loading info...")
.Modal(true)
.Draggable()
.Visible(false)
.HtmlAttributes(new { style = "padding: 10px 15px; max-width: 400px;" })
.AutoFocus(true)
.Position(p => p.Top(100).Left(400))
.Events(e => e.Close("onWindowClose"))
)
Некоторые сценарии:
//This script is the one that triggers the window to open
function openWindow(id) {
var window = $("#Window").data("kendoWindow");
window.refresh({
url: "/controller/action",
data: {
id: id
},
error: function (xhr, textStatus, exceptionThrown) {
window.close();
alert($.parseJSON(xhr.responseText));
}
});
window.open();
}
//This is the registered close event
function onWindowClose(e) {
var id = $("#ID").val();
if (id != null) {
$.ajax("/controller/action", {
type: "POST",
dataType: "json",
data: {
id: id
},
success: function (data) {
//TODO: derp
},
error: function (xhr, textStatus, exceptionThrown) {
alert($.parseJSON(xhr.responseText));
}
});
}
//var myWin = new $("#Window").data("kendoWindow");
//myWin.destroy();
$(this.element).empty();
$(this.element).html("Loading content...");
}
У меня возникла проблема. Я удаляю ненавязчивое включение скрипта из окна в заголовок главной страницы, поэтому скрипт включался только один раз. Я не замечал, что каждый раз, когда я использовал окно, сценарий также был включен. После исключения из окна все работало нормально. – gardarvalur