2014-11-03 5 views
0

У меня есть окно пользовательского интерфейса 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..."); 
} 
+0

У меня возникла проблема. Я удаляю ненавязчивое включение скрипта из окна в заголовок главной страницы, поэтому скрипт включался только один раз. Я не замечал, что каждый раз, когда я использовал окно, сценарий также был включен. После исключения из окна все работало нормально. – gardarvalur

ответ

1

У меня есть окно кендо, что я повторно использовать, который содержит элемент формы, который, в свою очередь, содержит некоторые текстовые поля ввода и поле ввода файла. Чтобы сохранить эту форму для повторной отправки входов файла, я перезагружаю форму при закрытии окна кендо. Я должен был сделать это от основного потока, чтобы не borking вверх POST, что происходит по телефону что-то вроде

closeAddAttachmentWindow: function() { 
     var window = $("#addAttachmentWindow").data("kendoWindow"); 
     window.close(); 

     setTimeout(function() { 
      $("#formUpload").trigger('reset'); 
     }, 200); 
    }, 

Вы пробовали что-то подобное в вашей OnWindowClose функции (е)?

+0

Благодарим вас за ответ @RobinGiltner. Я попробовал ваш ответ, но все равно это не сработает. Триггер для формы-id не так ли? Как и в моем случае, это будет так: $ («# payment-form»). Trigger ('reset'); – gardarvalur

+0

Да, это то, что я использовал. Ну, может, у кого-то будет лучшая идея. –

+0

Здравствуйте снова @RobinGlitner, я выяснил проблему, я объясню в своем посте. Однако я отведу вас за ваш ответ, потому что сброс формы - хороший идеал :) – gardarvalur

Смежные вопросы