我想根据数据集的结果重定向到不同的视图,但是我一直回到我当前所在的页面,并且无法解决原因。我进入if语句调用了动作,但是一旦我将视图返回到新页面,它就会将我返回到当前页面。
CSHTML页面
@{
ViewBag.Title = "Search Results";
EnumerableRowCollection<DataRow> 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";
}
<h2>NoResults</h2>
答案 0 :(得分:53)
更改为:
@{ Response.Redirect("~/HOME/NoResults");}
答案 1 :(得分:5)
这样做会更安全。
@{ Response.Redirect("~/Account/LogIn?returnUrl=Products");}
因此,该操作的控制器也会运行,以填充视图所需的任何模型。
虽然@Satpal提到过,但我建议您在控制器上进行重定向。
答案 2 :(得分:1)
这显然是视图中控制器逻辑的一个坏例子。最好在控制器中执行此操作并返回所需的视图。
[ChildActionOnly]
public ActionResult Results()
{
EnumerableRowCollection<DataRow> 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:Can't access ViewBag in a partial view in ASP.NET MVC3
ChildActionOnly
属性将确保您无法通过导航进入此页面,并且此视图必须呈现为部分视图,因此必须通过父视图呈现。 CFR:Using ChildActionOnly in MVC
答案 3 :(得分:0)
你可以转到同一个控制器的方法..使用这一行,如果你想将一些参数传递给那个动作,可以通过写入内部(new {})来完成。 注意: - 您可以根据需要添加任意数量的参数。
@ Html.ActionLink(&#34; MethodName&#34;,new {parameter = Model.parameter})