Окно MVC kendo — получение данных из функции JavaScript

#asp.net-mvc #kendo-ui #telerik

#asp.net-mvc #kendo-пользовательский интерфейс #telerik

Вопрос:

У меня есть это окно кендо в моем приложении

 Html.Kendo().Window()
    .Name("copyStructure")
    .Title("Copy Structure")
    .Content("Loading...")
    .LoadContentFrom("CopyStructure", "NewXmlLayout") // <-- here*
    .Draggable(false)
    .Visible(false)
    .Modal(true)
    .Actions(s => s.Custom(""))
    .Events(e => e.Open("openWindow").Close("closeWindow"))
  

И я пытаюсь передать данные в действие в LoadContentFrom(), которое возвращается функцией JavaScript, но я не знаю, как это сделать. Я могу передавать данные следующим образом:

 .LoadContentFrom("CopyStructure", "NewXmlLayout", new { type= "INPUT" })
  

Но это не то, что я ищу.

Функция JS:

 function getInfo() {
        return { type: "INPUT" };
    };
  

Мой контроллер:

  public ActionResult CopyStructure(string type)
    {
        return PartialView();
    }
  

Комментарии:

1. Что происходит при замене "NewXmlLayout" на getInfo() ? Что вы подразумеваете под «не то, что я ищу»?

2. "NewXmlLayout" это мой контроллер и CopyStructure мое действие.

Ответ №1:

Если вам действительно нужно получить доступ к своим данным с помощью функции JavaScript getInfo() , то способ сделать это — определить окно, как вы делаете, но не устанавливайте содержимое, пока не откроете окно. При открытии окна используйте jQuery.ajax() to call CopyResult , передавая результаты getInfo() в параметр data .

В вашем Razor извлеките LoadContentFrom добавить обработчик события для Open события:

 @(Html.Kendo().Window()
    .Name("copyStructure")
    // Omitted for brevity
    ...
    .Events(e => e.Open("copyStructure_Open"))
)
  

И в вашем обработчике в JavaScript вызовите $.ajax и в success обратном вызове content вызовите метод для объекта Window, передав возвращаемый data в качестве параметра:

 function copyStructure_Open(e) {
    $.ajax({
        url: '@Url.Action("CopyStructure", "NewXmlLayout")',
        type: 'POST',
        data: getInfo(),
        success: function(data) {
            e.sender.content(data);
        }
    });
}
  

Остерегайтесь отправлять только то, что требуется для содержимого окна, а не полную страницу (DOCTYPE, html, head, body) — см. Эту документацию от Telerik: http://docs .telerik.com/kendo-ui/getting-started/web/window/overview#loading-window-content-via-ajax

Комментарии:

1. спасибо, я рвал на себе волосы с помощью loadcontentfrom с частичным представлением mvc, пока я забыл установить layout равным null