部分视图中的MVC4 Ajax表单在kendo窗口内返回整个页面

时间:2013-09-12 20:24:28

标签: c# jquery ajax asp.net-mvc-4 kendo-ui

我进行了搜索和搜索,因为我的生活无法弄清楚我做错了什么。我有一个像这样的Kendo UI窗口:

<a id="@(item.POD_ID)"  class="k-button btn-reminder" title="Add Reminder" onclick="$('#windowR@(item.POD_ID)').data('kendoWindow').open();"><span class="icon-reminder icon-only btn-reminder"></span></a
    @(Html.Kendo().Window()
    .Name("windowR" + item.POD_ID)
    .Title("Set Reminder")
    .Content("loading...")
    .LoadContentFrom("_LoadReminder", "Purchasing", new { id = item.POD_ID })
    //.Iframe(true)
    .Draggable()
    //.Resizable()
    .Modal(true)
    .Visible(false)
    .Width(200)
    .Height(80)
    .Events(events => events
        .Close("onCloseReminder")
        .Open("onOpenReminder")
        .Deactivate("function() { this.refresh();}")
        .Activate("function(){ $('#empNumBox').focus(); }")
    )
)

并且,如果窗口是iframe,所有这些都可以正常工作,但我不能将它作为Iframe,因为这意味着重新加载其中的所有脚本和样式,并且更难以引用父级。

所以这个窗口,从部分视图加载内容,如下所示:

@using (Ajax.BeginForm("SetReminders", "Purchasing", new AjaxOptions { UpdateTargetId = "result" }))
{
<div id="result"></div>
<input type="number" id="empNumBox" name="empNum" style="width: 70px" class="k-textbox" required autofocus="autofocus" value="@(ViewBag.EMP_NUM)"/>
<input type="hidden" value="@ViewBag.POD_ID" name="podID" id="POD_ID_Form_Field"/>
<input type="submit" id="submitReminder_button" style="width:auto;" class="k-button submitReminder_button" value="Remind" />
}

该部分视图也很好。这是问题,当你提交ajax表单,并且kendo窗口不是iframe时,它将呈现整个页面,就像控制器返回的那样(我已经尝试了几件事,你可以在下面注释掉的代码中看到) :

        [HttpPost]
    public ActionResult SetReminders(int empNum, int podID)
    {
        //some database stuff that works fine

        string response;
        if (existingReminder == 0)
        {
            //more db stuff that also works fine
            db.SaveChanges();
            response = "Success!";
        }
        else
        {
            response = "Reminder exists.";
            //return PartialView("_LoadReminder", new string[] { "Reminder already exists!" });
        }
        // $('#submitReminder_button').closest('.k-window-content').data('kendoWindow').close();
        //alert('Hello world!');
        //return Content("<script type='text/javascript/>function(){alert('Hello world!');}</script>");
        return PartialView("_SubmitSuccess");
        //return Json(response);
        //return Content(response, "text/html");
    }

如果有人好奇,_SubmitSuccess包含的所有内容都是“成功!”。

这是一个我发现ajax响应放在div中的例子,我遵循了这个例子: http://pratapreddypilaka.blogspot.com/2012/01/htmlbeginform-vs-ajaxbeginform-in-mvc3.html

这里似乎真正的问题是Kendo窗口,但是我还没有在他们的论坛上找到关于这个的东西,似乎没有很多使用kendo窗口来加载提交一个部分视图的例子通过ajax表单并返回一个不同的局部视图,以便在同一窗口中加载,并且不使用iframe。

欢迎任何建议,即使是代码的其他部分,我也一直在寻求改进。

1 个答案:

答案 0 :(得分:0)

尝试将SetReminders()的返回类型更改为PartialViewResult