无法通过jQuery在Kendo弹出窗口中显示ASP.NET MVC View

时间:2015-08-19 19:46:13

标签: javascript jquery asp.net-mvc kendo-asp.net-mvc

我正在尝试使用jQuery和ASP.NET MVC在Kendo窗口中提交表单,但我遇到了问题。

首先,这是有效的。如果我在常规浏览器窗口中进行此调用(即不在弹出式iframe Kendo窗口中)...

function formSubmit() {
    $('form').submit();
}

...呼叫进入控制器。如果存在验证错误,控制器将返回一个新视图,它们将显示在浏览器窗口中。如果操作成功,则将视图返回到搜索页面。到目前为止,非常好。

现在,我想在Kendo窗口iframe中做几乎完全相同的事情,除了一些重要的区别:

  • 如果存在验证错误,请将Kendo窗口保持打开状态,直到它们得到解决。
  • 如果提交成功并且这是一个Create操作,则通过JSON返回新创建的数据库记录的记录ID,并将该值传递给另一个JavaScript函数receiveNewIDFromIFrame()。并关闭剑道窗口。
  • 如果提交成功并且这是一个编辑操作,则返回null。并关闭剑道窗口。

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窗口的能力。

有什么想法吗?

0 个答案:

没有答案