【问题标题】:Kendo window refresh does not work剑道窗口刷新不起作用
【发布时间】:2016-03-18 11:59:19
【问题描述】:

我陷入了一个看似非常简单的场景: 加载带有绑定到模型的局部视图的 Kendo 窗口,动态参数 modelId 将由客户端 js 提供。

我发现了refresh() 方法,但这意味着已经初始化了一个剑道窗口。这是第一个问题。我需要modelId 来显示内容。 所以我解决了这个问题,最初只是返回了一个新模型,应该用refresh() 方法+一个有效参数modelId 替换/刷新它,最后显示出来。 问题:视图不会更新。 不过,refresh() 方法确实有效。 控制器接收参数modelId,获取对应的模型并返回视图。但是 Kendo 窗口仍然保留空视图模型。

我非常努力地让它工作,但没有成功..

@(Html.Kendo().Window()
      .Name("window")
      .Title("")
    //loads an empty viewmodel intially as there is no possibility to pass parameter
      .LoadContentFrom("Actionname", "Controller")          
      .Actions(actions => actions.Close())
      .Modal(true).Visible(false)
      .HtmlAttributes(new {style = "margin: 10px"})
      )

Javascript sn-p:

$("#window").data("kendoWindow").refresh({
    url: '/controller/actionname/',
    data: { parameterlabel: parameter}
});
$("#window").data("kendoWindow").open().center(true);

【问题讨论】:

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


    【解决方案1】:

    ..难道是我弄错了,而 refresh() 方法实际上并不需要一个完全加载的剑道窗口,并且内容放在首位?我在 Teleriks 页面上找到了这个:“ 如果您想动态加载窗口中的内容(通过 AJAX),您可以这样做:

    //set up kendo window
    $(document).ready(function () {
         var window = $("#window").kendoWindow({
             height: "200px",
             modal: true,
             title: "Centered Window",
             visible: false,
             width: "200px"
    
         }).data("kendoWindow");
     });
    //using the refresh method after the window has been intialized:
    var dialog = $("#window").data("kendoWindow");
    dialog.refresh({
        url: "/search",
        data: { query: "foobar" }
    }); "
    

    .. 不是我对刷新的期望,但没关系.. 所以也许我应该删除创建的剑道窗口中的加载内容:

    @(Html.Kendo().Window()
    .Name("window")
    .Title("")
    //.LoadContentFrom("Actionname", "Controller", new { modelID = modelId })          
    .Actions(actions => actions.Close())
    .Modal(true).Visible(false)
    .HtmlAttributes(new {style = "margin: 10px"})
    )
    

    【讨论】:

    • 这对我有帮助。我发现删除 LoadContentFrom 意味着我可以用不同的数据重新加载(刷新)窗口
    【解决方案2】:

    不确定这是否能解决您的主要问题,但您应该可以这样做:

    @(Html.Kendo().Window()
        .Name("window")
        .Title("")
        .LoadContentFrom("Actionname", "Controller", new { modelID = modelId })          
        .Actions(actions => actions.Close())
        .Modal(true).Visible(false)
        .HtmlAttributes(new {style = "margin: 10px"})
    )
    

    那么您将不需要加载空模型并使用正确的参数刷新它。

    【讨论】:

    • 好的谢谢。但这有什么不同呢?我不希望 refresh() 方法以这种方式做出不同的反应。现在真的有办法最初传递参数吗?为什么 refresh() 不起作用?感谢您的帮助!
    • ..我刚刚找到另一个似乎相关但也没有真正结论的话题..stackoverflow.com/questions/27323213/…
    • ..难道是我弄错了,而 refresh() 方法实际上不需要一个满载的剑道窗口,内容放在首位?
    【解决方案3】:

    我第一次看到这个问题:

    wnd.refresh({
        url: msg.Url,
        type: "POST",
        contentType: "application/json", 
        dataType: "json",
        data: msg.Data
    });
    

    剑道窗口是空的。 Fiddler 中的请求(删除了一些标头和数据):

    POST http://localhost/My/PtsSchedule/Pts_AddBooking HTTP/1.1
    Accept: application/json, text/javascript, */*; q=0.01
    Content-Type: application/json
    

    问题显然出在:

    接受:application/json、text/javascript、/; q=0.01

    并删除 dataType: 为我解决了这个问题。这里有新的刷新:

    wnd.refresh({
        url: msg.Url,
        type: "POST",
        contentType: "application/json", 
        data: msg.Data
    });
    

    在 Fiddler 中:

    POST http://localhost/My/PtsSchedule/Pts_AddBooking HTTP/1.1
    Accept: text/html, */*; q=0.01
    Content-Type: application/json
    

    并且内容显示在剑道窗口中。希望这是来自帮助。

    【讨论】:

    • 我有同样的情况:使用数据类型:'json' 我的剑道窗口一直显示旋转进度(但内容实际上是在后面加载的(在 chrome 响应中查看))但是当我删除数据类型时:' json' 进度条消失,显示数据
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多