我有这样的事情:
@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?
答案 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"))'
}