39

我想根据数据集的结果重定向到不同的视图,但我一直返回到我当前所在的页面,但不知道为什么。我进入 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

4 回答 4

76

改成这样:

@{ Response.Redirect("~/HOME/NoResults");}
于 2013-07-15T12:06:04.440 回答
11

这样做会更安全。

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

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


从一个视图重定向到另一个视图

尽管正如@Satpal 提到的,我建议您在控制器上进行重定向。

于 2013-07-15T12:09:39.633 回答
1

您可以转到同一控制器的方法..使用此行,如果您想将一些参数传递给该操作,可以通过在内部写入 (new {}) 来完成。注意:- 您可以根据需要添加任意数量的参数.

@Html.ActionLink("MethodName", new { parameter = Model.parameter })

于 2017-06-06T09:49:42.200 回答
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 修改为 Partial。

并将其称为父视图中的部分视图

@Html.Partial("Results")

由于此处解释的原因,您可能必须将 Customer 集合作为模型传递给 Result 操作或 ViewDataDictionary:Can't access ViewBag in a partial view in ASP.NET MVC3

ChildActionOnly属性将确保您无法通过导航进入此页面,并且此视图必须呈现为部分视图,因此由父视图呈现。cfr:在 MVC 中使用 ChildActionOnly

于 2016-09-03T16:35:42.230 回答