我一直在寻找和寻找,对于我的生活,我无法弄清楚我做错了什么。我有一个像这样的 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 包含的只是单词“Success!”。
这是我发现将 ajax 响应放入 div 的示例,我遵循了该示例:http: //pratapreddypilaka.blogspot.com/2012/01/htmlbeginform-vs-ajaxbeginform-in-mvc3.html
看来这里真正的问题是剑道窗口,但我还没有在他们的论坛上找到关于这个的东西,似乎没有很多使用剑道窗口加载通过ajax提交表单的部分视图的例子并返回要在同一窗口中加载的不同局部视图,并且不使用 iframe。
欢迎任何建议,即使是关于代码的其他部分,我一直在寻求改进。