提交后,kendo窗口呈现为整页

时间:2013-11-05 19:39:29

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

我正在打开一个包含局部视图的kendo.window。当我单击“确定”时,我想保存修改后的数据,关闭窗口并重新加载基页。出于某种原因,它不起作用。它将部分视图打开为整页。

我该如何解决这个问题?我应该如何让我的部分视图返回,因为它不能作为页面打开?

谢谢,

这是我到目前为止所拥有的。

基页:

<div id="windowBadgeIMGDiv" class="k-content">
    <div id="windowBadgeIMG" style="display:none">
</div>

<script type="text/javascript">
    function editDetails(id) {
        var windowBadgeIMG = $("#windowBadgeIMG");
        windowBadgeIMG.kendoWindow({
            modal: true,
            width: "950px",
            title: "Modify badge picture",
            content: {
                url: "/Home/BadgePicture",
                data: { id: id }
            },
            deactivate: function () {
            }
        });

        windowBadgeIMG.data("kendoWindow").center();
        windowBadgeIMG.closest(".k-window").css({ top: 100 });
        windowBadgeIMG.data("kendoWindow").open();
    }
</script>

部分观点:

<%using (Html.BeginForm("BadgePicture", "Home", FormMethod.Post, new { enctype = "multipart/form-data", id = "ImgForm", name = "ImgForm" }))
{ %>
    <input type="hidden" name="hdnBadgeId" id="hdnBadgeId" value="<%= Model.Id%>" />
    <table>
        <!--My editable fields go here-->
        <tr>
            <td style="padding-top: 20px;" align="center" colspan="4">
                <button id="btnSubmit" type="submit"><asp:Label runat="server" Text="<%$ Resources:Global, Update %>" /></button>
            </td>
        </tr>
    </table>
<%} %>

控制器

    [HttpPost]
    public PartialViewResult BadgePicture(string[] hdnBadgeId, HttpPostedFileWrapper Image1)
    {
        //Do some work with the data
        return PartialView(model);
    }

更新:我的解决方案

modal: true,替换为iframe: true, content: "/Home/BadgePicture/" + id,并使用View而不是PartialView。要在提交时关闭窗口:Close Window from within External Content

2 个答案:

答案 0 :(得分:2)

您的意思是在单击“保存”按钮后,结果是数据已发布,然后响应呈现为整页?阅读代码,看起来就是因为表单发布会发生的事情。

浏览器将使用帖子的结果替换视图。您可能想尝试使用iframe来使用kendo窗口,以便将帖子的结果限制为iframe。但是,如果您这样做,那么您的部分应该是完整的HTML页面而不是部分HTML页面,因为它将在自己的iframe中呈现。 http://docs.kendoui.com/api/web/window#configuration-iframe

或者,您必须使用AJAX发布您的窗口数据而不是使用表单帖子,然后替换kendo窗口的内容。

答案 1 :(得分:0)

它可能不是完全相同的问题,但对我而言,这实际上是this issue的一种表现形式 - 剑道窗口AJAX请求实际上被取消了,并且它正在关注一个链接而是URL。很难跟踪,因为在这个实例中也没有调用kendo窗口错误事件,而且我实际上没有设置浏览器导航到的链接。

就我而言,我是从自定义网格工具栏按钮创建窗口的:

@(Html.Kendo().Grid<SomeViewModel>()
    .Name("grid")
    .ToolBar(t =>
    {
        t.Custom().Text("Add Item").HtmlAttributes(new { id = "AddItem" });
        // would also get the current page as a default URL
    })

    ...
)

然后通过javascript绑定它:

$("#AddItem").click(function (e) {
    openNewKendoWindow(); // would open link URL in whole page
});

修复是将e.preventDefault();添加到点击处理程序,虽然显然return false;也可以正常工作:

$("#AddItem").click(function (e) {
    openNewKendoWindow();
    e.preventDefault();
});

这允许Kendo窗口打开,同时忽略href属性中的任何内容。