【问题标题】:Ajax.BeginForm that can redirect to a new page without submit无需提交即可重定向到新页面的 Ajax.BeginForm
【发布时间】:2015-07-31 13:30:39
【问题描述】:

我有这样的事情:

@using (Ajax.BeginForm("Validate", "Basket", new AjaxOptions
    {
        UpdateTargetId = "panelId", 
        HttpMethod = "Post", 
        InsertionMode = InsertionMode.Replace,
        OnSuccess = "SuccessMethod" 
    }))
{
    @if(Model != null)
    {
       my action...
    }
    else
    {
     Response.Redirect(Url.Action("Index", "Home"))
    }
}

当我使用提交按钮时它工作得很好,因为部分正在刷新,并且布局保持不变。

当我的Model 变为null 时,我遇到了问题,因为用户在我的页面上执行了删除操作。然后我想重定向到我的主页(不同的布局),但是当我这样做时(就像在我的代码中一样),由于InsertionMode.Replace 模式,我的页面上有两个布局。

如何在我的视图中省略 Ajax.BeginForm?

【问题讨论】:

  • 您说“我的页面上有两种布局”是什么意思?有什么错误吗?
  • 我的页面使用Ajax.BeginForm 使用Layout1,但索引使用Layout2。由于InsertionMode.Replace,我在 Layout1 中获得了带有 Layout2 的主页(我有两个标题横幅,一个来自 Layout1,一个来自 Layout2)。
  • 你的 SuccessMethod 是什么样的?
  • @JamieD77 if (result.url) { window.location.href = result.url;但这只有在点击提交按钮后才会触发。就我而言,重定向取决于模型值。
  • 我想您应该发布更多代码,例如您的控制器操作。我无法理解为什么您不能在控制器中检查 Model == null 并重定向而不是首先加载此视图

标签: c# asp.net .net ajax asp.net-mvc


【解决方案1】:

因为您使用的是 ajax 表单 (Ajax.BeginForm),所以框架仅覆盖表单,当您从 ajax 表单中重定向时,为您提供两种布局(因为只有表单中的 html 被重定向,其余的表单外的页面不会被重定向)。

你可以用一些 javascript/jquery 来解决这个问题:

首先,删除Response.Redirect

这可以用占位符 div 代替以指示没有结果,或者代码可以检查是否没有结果 - 如果没有更多代码,则无法确定在您的特定情况下是否/如何完成,所以在一般情况下,添加一个占位符,例如:

@if (Model == null)
{
    <div class='nomodel'></div>
}

其次,更新SuccessMethod()里面的OnSuccess代码,检查是否没有模型(或者检查是否没有订单行),然后重定向整个页面,例如:

if ($(".nomodel").length > 0) {
    location.href = '@Url.Action("Index", "Home"))'
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-03-14
    • 1970-01-01
    • 2016-01-09
    • 2014-02-27
    • 1970-01-01
    • 2014-10-16
    • 2019-01-17
    相关资源
    最近更新 更多