Ajax.BeginForm可以在没有提交的情况下重定向到新页面

时间:2015-07-31 13:30:39

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

我有这样的事情:

@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?

1 个答案:

答案 0 :(得分:0)

因为你正在使用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"))'
}