我正在尝试使用jQuery和ASP.NET MVC在Kendo窗口中提交表单,但我遇到了问题。
首先,这是有效的。如果我在常规浏览器窗口中进行此调用(即不在弹出式iframe Kendo窗口中)...
function formSubmit() {
$('form').submit();
}
...呼叫进入控制器。如果存在验证错误,控制器将返回一个新视图,它们将显示在浏览器窗口中。如果操作成功,则将视图返回到搜索页面。到目前为止,非常好。
现在,我想在Kendo窗口iframe中做几乎完全相同的事情,除了一些重要的区别:
JavaScript看起来像这样:
function inIframe() {
try {
return window.self !== window.top;
} catch (e) {
return true;
}
}
function formSubmit() {
if (!inIframe()) {
// We are a parent window
$('form').submit();
}
else {
// We are a pop-up window
$.post($('form').attr("action"), $("form").serialize(), function(data){
if (data != null) {
if ($.isNumeric(data)) {
// We got back an id, so that means we need to pass it back to the parent form.
var rowIndex = "@Model.PopupWindowRowIndex";
parent.receiveNewIDFromIFrame(data, rowIndex);
parent.$('#window').data('kendoWindow').close(); // Close the popup window
}
else if (data = '') {
// We got back nothing, which means we were editing and we can close this window
parent.$('#window').data('kendoWindow').close(); // Close the popup window
}
else {
// We got back a view, so display that in the pop-up window.
$('form').html(data); // THIS DOESN'T WORK.
}
}
})
}
}
Create的控制器代码看起来像这样:
public ActionResult Create(VMReportObservation viewModel)
{
if (!ModelState.IsValid)
{
// There are validation errors.
return View(viewModel);
}
// ... Save data ...
if (viewModel.IsInPopupWindow)
{
return Json(reportHeader.record_id.ToString()); // Return the record ID so we know to attach it.
}
else
{
return RedirectToAction("Index"); // Since we're in the main window, go back to the index after submitting.
}
}
我遇到的问题是当我收到视图并尝试通过jQuery填充Kendo窗口时:$('form')。html(data);
我肯定会回复合法的HTML,但我最终在Kendo窗口看到的是< hr> divider元素(它是视图的一部分),没有别的。我已经尝试过其他方式来显示我从控制器收到的视图,但是我无法正常显示它。
当然,如果我使用我的初始代码......
function formSubmit() {
$('form').submit();
}
...看到带有表单验证错误的视图没有问题。但是,我失去了捕获数据库中新记录ID的能力以及知道何时关闭Kendo窗口的能力。
有什么想法吗?