从cshtml页面重定向
我想根据数据集的结果重定向到不同的视图,但我不断返回到我当前所在的页面,并且无法解决原因。 我进入if语句调用操作但是一旦我将视图返回到新页面,它就会将我返回到当前页面。
CSHTML页面
@{ ViewBag.Title = "Search Results"; EnumerableRowCollection custs = ViewBag.Customers; bool anyRows = custs.Any(); if(anyRows == false) { Html.Action("NoResults","Home"); } // redirect to no search results view
}
调节器
public ActionResult NoResults() { return View("NoResults"); }
查看我也无法得到..
@{ ViewBag.Title = "NoResults"; } NoResults
改为:
@{ Response.Redirect("~/HOME/NoResults");}
这样做会更安全。
@{ Response.Redirect("~/Account/LogIn?returnUrl=Products");}
因此,该操作的控制器也会运行,以填充视图所需的任何模型。
资源
从视图重定向到另一个视图
虽然@Satpal提到过,但我建议您在控制器上进行重定向。
这显然是视图中控制器逻辑的坏情况。 最好在控制器中执行此操作并返回所需的视图。
[ChildActionOnly] public ActionResult Results() { EnumerableRowCollection custs = ViewBag.Customers; bool anyRows = custs.Any(); if(anyRows == false) { return View("NoResults"); } else { return View("OtherView"); } }
将NoResults.cshtml修改为部分。
并在父视图中将其称为部分视图
@Html.Partial("Results")
您可能必须将Customer集合作为模型传递给Result操作或ViewDataDictionary,原因如下所述: 无法在ASP.NET MVC3的局部视图中访问ViewBag
ChildActionOnly
属性将确保您无法通过导航转到此页面,并且此视图必须呈现为部分视图,因此必须通过父视图呈现。 cfr: 在MVC中使用ChildActionOnly
你可以转到同一个控制器的方法。使用这一行,如果你想将一些参数传递给那个动作,可以通过写入内部(new {})来完成。注意: – 你可以根据需要添加任意数量的参数。
@ Html.ActionLink(“MethodName”,new {parameter = Model.parameter})