C# 从cshtml页面重定向

C# 从cshtml页面重定向,c#,asp.net-mvc-4,razor,C#,Asp.net Mvc 4,Razor,我想根据数据集的结果重定向到不同的视图,但我一直返回到当前所在的页面,不知道为什么。我跳转到if语句中,动作被调用,但一旦我将视图返回到新页面,它就会将我返回到当前页面 CSHTML页面 @{ ViewBag.Title = "Search Results"; EnumerableRowCollection<DataRow> custs = ViewBag.Customers; bool anyRows = custs.Any(); if(anyRows == false) {

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

@{
ViewBag.Title = "NoResults";
 }

<h2>NoResults</h2>
@{
ViewBag.Title=“NoResults”;
}
诺里斯
更改为:

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

这样做会更安全

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

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

来源


尽管@Satpal提到过,我还是建议您在控制器上进行重定向。

这显然是视图中控制器逻辑的糟糕情况。最好在控制器中执行此操作并返回所需的视图

[ChildActionOnly]
public ActionResult Results() 
{
    EnumerableRowCollection<DataRow> custs = ViewBag.Customers;
    bool anyRows = custs.Any();

    if(anyRows == false)
    {
        return View("NoResults");
    }
    else
    {
        return View("OtherView");
    }
}
由于以下原因,您可能必须将客户集合作为模型传递给结果操作或ViewDataDictionary:


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

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


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

为什么不能从控制器重定向到另一个操作?为什么我要返回到操作。。我想返回视图
[ChildActionOnly]
public ActionResult Results() 
{
    EnumerableRowCollection<DataRow> custs = ViewBag.Customers;
    bool anyRows = custs.Any();

    if(anyRows == false)
    {
        return View("NoResults");
    }
    else
    {
        return View("OtherView");
    }
}
@Html.Partial("Results")