MVC kendo窗口 - 从javascript函数获取数据

时间:2014-06-18 20:25:47

标签: asp.net-mvc kendo-ui telerik

我的应用程序中有这个kendo窗口

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"))

我正在尝试将数据传递给由JavaScript函数返回的LoadContentFrom()中的acrion,但我不知道该怎么做。我可以传递这样的数据:

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

但不是我想要的。

JS功能:

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

我的控制器:

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

1 个答案:

答案 0 :(得分:9)

如果您确实需要通过JavaScript getInfo()函数访问您的数据,那么执行此操作的方法是定义您正在执行的窗口,但在打开窗口之前不要设置内容。打开窗口时,使用jQuery.ajax()调用CopyResult,将getInfo()的结果传递给data参数。

在你的剃刀中,取出LoadContentFromOpen事件添加事件处理程序:

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

在JavaScript中的处理程序中,调用$.ajax并在success回调中,调用Window对象上的content方法,并将返回的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