从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})