2013-07-15 18 views
19

Chcę przekierować do innego widoku, w zależności od wyniku zbioru danych, ale nadal wracam do strony, na której aktualnie się znajduję, i nie wiem, dlaczego. Wpadam do instrukcji if, gdy wywoływana jest akcja, ale gdy zwrócę widok na nową stronę, to zwróci mnie z powrotem do bieżącej strony.Przekierowanie ze strony cshtml

strona 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 

}

Controller

public ActionResult NoResults() 
    { 
     return View("NoResults"); 

    } 

Zobacz cant zbyt ..

@{ 
ViewBag.Title = "NoResults"; 
} 

<h2>NoResults</h2> 
+4

Dlaczego nie można przekierować do innego działania ze sterownikiem? – Satpal

Odpowiedz

40

Zmień to:

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

Dlaczego chciałbym wrócić do działania. Chcę przywrócić widok –

5

Byłoby bezpieczniej to zrobić.

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

Więc sterownik dla tego działania prowadzi także, aby wypełnić każdy model widoku potrzeb.

Źródło
Redirect from a view to another view

Choć jak wspomniano @Satpal, ja polecam Ci zrobić przekierowanie na kontrolerze.

0

To wyraźnie zły przypadek logiki kontrolera w widoku. Byłoby lepiej zrobić to w kontrolerze i przywrócić pożądany widok.

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

    if(anyRows == false) 
    { 
     return View("NoResults"); 
    } 
    else 
    { 
     return View("OtherView"); 
    } 
} 

Zmodyfikuj NoResults.cshtml na częściowe.

I nazywają to jako częściowy widok w świetle dominującej

@Html.Partial("Results") 

Być może będziesz musiał zdać kolekcję klienta jako model do działania pociągają lub w ViewDataDictionary ze względów wyjaśnione tutaj: Can't access ViewBag in a partial view in ASP.NET MVC3

Atrybut upewnia się, że nie można przejść do tej strony, nawigując i że ten widok musi być renderowany jako częściowy, a więc w widoku nadrzędnym. cfr: Using ChildActionOnly in MVC

0

Możesz przejść do metody tego samego kontrolera, używając tej linii, a jeśli chcesz przekazać niektóre parametry do tej akcji, możesz to zrobić pisząc wewnątrz (nowy {}) .. Uwaga: - możesz dodać tyle parametrów, ile potrzebujesz.

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

Powiązane problemy