MVC4 Ajax form in partial view returns whole page when inside kendo window

被刻印的时光 ゝ 提交于 2019-12-13 00:36:05

问题


I've searched and searched and for the life of me cannot figure out what I'm doing wrong. I have a Kendo UI window like so:

<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(); }")
    )
)

And, if the window is an Iframe, all of this works just fine, however I cannot have it as an Iframe, because that means reloading all of the scripts and styles within it and more difficult to reference parent.

So this window, loads content from the partial view like so:

@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" />
}

That partial view also renders fine. Here is the problem though, when you submit the ajax form, and the kendo window is not an iframe, it will render the whole page as whatever the controller returns (and I have tried several things, you can see in the commented out code below:

        [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");
    }

If anyone is curious, all that the _SubmitSuccess contains is the word "Success!".

Here's an example that I found with the ajax response being put in a div, which I followed: http://pratapreddypilaka.blogspot.com/2012/01/htmlbeginform-vs-ajaxbeginform-in-mvc3.html

It seems the real issue here is the Kendo window, but I have yet to find something on their forums about this, doesn't seem that there's a lot of examples of using a kendo window to load a partial view that submits an form via ajax and returns a different partial view to be loaded within the same window and does not use an iframe.

Any suggestions welcome, even about other parts of the code, I'm always looking to improve.


回答1:


Try changing the return type of SetReminders() to PartialViewResult



来源:https://stackoverflow.com/questions/18773706/mvc4-ajax-form-in-partial-view-returns-whole-page-when-inside-kendo-window

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!