2013-07-15 134 views
19

我想根据数据集的结果重定向到不同的视图,但我一直返回到我目前所在的页面,并且无法解决原因。我放入if语句中,该操作被调用,但是一旦我将视图返回到新页面,它就会将我返回到当前页面。从cshtml重定向页面

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

为什么你不能重定向到从控制器中的另一个动作? – Satpal

回答

40

改成这样:

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

为什么我想要返回到操作..我想返回视图 –

5

这样做会更安全。

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

因此,对于该操作的控制器运行为好,以填充任何模型视图的需求。

来源
Redirect from a view to another view

虽然作为@Satpal提到的,我不建议你做的转向控制器上。

0

这显然是视图中控制器逻辑的一种不好的情况。在控制器中执行此操作并返回所需的视图会更好。

[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") 

您可能需要通过客户集合作为模型的结果动作或一个的ViewDataDictionary由于原因这里解释:Can't access ViewBag in a partial view in ASP.NET MVC3

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

0

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

@ Html.ActionLink( “方法名”,新{参数= Model.parameter})