2013-07-15 132 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})