从cshtml页面重定向

时间:2013-07-15 11:58:45

标签: c# asp.net-mvc-4 razor

我想根据数据集的结果重定向到不同的视图,但是我一直回到我当前所在的页面,并且无法解决原因。我进入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>

4 个答案:

答案 0 :(得分:53)

更改为:

@{ Response.Redirect("~/HOME/NoResults");}

答案 1 :(得分:5)

这样做会更安全。

@{ Response.Redirect("~/Account/LogIn?returnUrl=Products");}

因此,该操作的控制器也会运行,以填充视图所需的任何模型。

  

<强>来源
  Redirect from a view to another view

虽然@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})