从cshtml页面重定向

本文关键字:重定向 cshtml | 更新日期: 2023-09-27 18:22:17

我想根据数据集的结果重定向到不同的视图,但我一直被返回到我当前所在的页面,无法找出原因。我放入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>

从cshtml页面重定向

更改为:

@{ 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");
    }
}

将NoResults.cshtml修改为Partial。

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

@Html.Partial("Results")

您可能必须将Customer集合作为模型传递给Result操作或ViewDataDictionary,原因如下:Can';t在ASP.NET MVC3 中的部分视图中访问ViewBag

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

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

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