在剑道窗口中带有表单的 PartialView

Posted

技术标签:

【中文标题】在剑道窗口中带有表单的 PartialView【英文标题】:PartialView with a form in a kendo window 【发布时间】:2015-04-07 11:53:50 【问题描述】:

在我的项目中,我需要在 Kendo 窗口中放置一些表格。这些形式是另一种局部视图。我用它来加载部分视图:

@(html.Kendo().Window()
      .Name("editPasswordPopUp")
      .Visible(false)
     .Modal(true)
     .Width(600)
     .Height(500)
    .Position(settings =>
            settings.Top(70).Left(200))
      .Title("Edit your password")
      .Content("loading user info...")
     .LoadContentFrom("EditPassword", "Member")
      .Iframe(true)
      .Resizable()
      .Draggable()
      )

PartialView 的动作:

public ActionResult EditPassword()

   return PartialView();


[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult EditPassword(EditPasswordViewModel viewModel)

   [...]
   return RedirectToAction("Profile", "Member", new id = viewModel.Id);
   [...]

这是我的部分视图:

@model Devoteam.CustomerPortal.ViewModels.EditPasswordViewModel
@
ViewBag.Title = "Edit";
Layout = null;


@Styles.Render("~/Content/css")
@Scripts.Render("~/bundles/jquery")
@Scripts.Render("~/bundles/jqueryval")
@Scripts.Render("~/bundles/kendo")

@using (Html.BeginForm())

  @Html.AntiForgeryToken()
  @Html.Partial("_GenericMessage")

  <div id="messageError">
    @Html.ValidationSummary()
  </div>
  // FIELDS
  <div class="buttons">
    <input type="submit" value="Confirm" class="big-button" />
    <input type="submit" value="Cancel" class="big-button" />
  </div>

当我单击按钮打开 Kendo 窗口时,部分视图会正确加载。 当我提交表单时,该操作被正确调用。 这是我的问题:当控制器完成其工作时,我调用 RedirectToAction 来重定向用户。但是页面是在 Kendo 窗口而不是主窗口中加载的。有什么办法可以关闭剑道窗口吗?

第二个问题:按取消键时如何关闭剑道窗口?

提前谢谢你。 (对不起我的英语不好,这不是我的母语)

【问题讨论】:

您是否设法对该重定向进行排序?要关闭窗口,您可以执行 onclick="parent.jQuery('#windowName').data('kendoWindow').close();" 【参考方案1】:

在从 PartialView 的服务器端控制器代码提交后,您可以在 javascript 中作为提交例程的一部分执行此操作,而不是在提交后自动关闭窗口/重定向。

    在 PartialView 中不要使用 return RedirectToAction("Profile", "Member", new id: viewModel.Id ,只需使用 return null

    如果您需要在窗口关闭后刷新父级,而我在您的问题中没有看到足够的代码首先从您的 主窗体 启动您的窗口,但是你会在那里绑定一个事件到你的 KendoWindow “关闭”:

    <input type="button" value="Edit Password" onclick="editPassword()" />
    
    <script type="text/Javascript">
        function editPassword() 
            var url = '@Url.Action("EditPassword", "Password")?viewModel=' + '@Model';
            var win = ('#editPasswordPopUp').data('kendoWindow').bind("close", function(e) 
                // Whatever you put here will run after your PartialView
                window.top.location.reload();  // reloads parent onclose of Kendo window
            );
            win.refresh(url);
            win.open();
            win.center();
        
    </script>
    

    如果您希望窗口在提交后自动关闭并刷新父窗口,您需要一个自定义函数来执行submit(),而不是使用您拥有的input type="submit"。这样您就可以按照 Dante 的建议将窗口关闭事件添加到您的 PartialView 中:

    <input type="button" value="Confirm" class="big-button" onclick="formSubmit() />
    
    <script type="text/Javascript">
        function formSubmit() 
            $('form').submit();
            parent.$('#editPasswordPopUp').data('kendoWindow').close();
        
    </script>
    

    对于关闭表单的取消按钮,您将执行相同的操作。将其设为type="button" 而不是type="submit",放入onclick 以转到使用同一行关闭窗口的函数:parent.$('#editPasswordPopUp').data('kendoWindow').close();

【讨论】:

以上是关于在剑道窗口中带有表单的 PartialView的主要内容,如果未能解决你的问题,请参考以下文章

将新内容加载到剑道窗口的正确方法是啥?

单击按钮时剑道网格不会打开剑道窗口

如何从剑道窗口外调用 jquery 选择器?

如何设置剑道窗口的内容?

使用剑道菜单打开多个窗口

如何自定义剑道调度程序弹出窗口