2013-07-15 16 views
19

Ich möchte in eine andere Ansicht abhängig von dem Ergebnis eines Datasets umleiten, aber ich werde immer wieder auf die Seite, die ich gerade bin, und kann nicht herausfinden, warum. Ich lasse mich in die if-Anweisung fallen, in der die Aktion aufgerufen wird, aber sobald ich die Ansicht auf die neue Seite zurückgebe, kehrt sie zu der aktuellen Seite zurück.Umleiten von cshtml Seite

CSHTML Seite

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

    } 

anzeigen Ich kann nicht bekommen ..

@{ 
ViewBag.Title = "NoResults"; 
} 

<h2>NoResults</h2> 
+4

Warum können Sie nicht auf eine andere Aktion aus Controller umleiten? – Satpal

Antwort

40

Änderung dieser:

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

Warum würde ich zurück zur Aktion zurückkehren wollen .. Ich möchte die Ansicht zurückgeben –

5

Wäre sicherer, dies zu tun.

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

So ist der Controller für diese Aktion läuft auch, jedes Modell die Ansicht Bedürfnisse zu füllen.

Quelle
Redirect from a view to another view

Obwohl als @Satpal erwähnt, ich Ihnen empfehlen die Umleitung auf dem Controller zu tun.

0

Dies ist eindeutig ein schlechter Fall von Controller-Logik in einer Ansicht. Es wäre besser, dies in einem Controller zu tun und die gewünschte Ansicht zurückzugeben.

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

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

Ändern Sie NoResults.cshtml zu einem Partial.

Und nennen dies als Teilansicht in der übergeordneten Ansicht

@Html.Partial("Results") 

Sie könnten die Kunden Sammlung als Modell zu dem Ergebnis Aktion oder in einem Viewdatadictionary aus Gründen erklärt hier passieren müssen: Can't access ViewBag in a partial view in ASP.NET MVC3

Das Attribut ChildActionOnly stellt sicher, dass Sie nicht durch Navigieren zu dieser Seite navigieren können und dass diese Ansicht als partielle, also von einer übergeordneten Ansicht gerendert werden muss. cfr: Using ChildActionOnly in MVC

0

Sie können zur Methode des gleichen Controllers gehen .. mit dieser Linie, und wenn Sie einige Parameter zu dieser Aktion übergeben möchten, kann es durch das Schreiben innerhalb (neue {}) getan werden .. Hinweis: - Sie können beliebig viele Parameter hinzufügen.

@ Html.ActionLink ("Method", neue {parameter = Model.parameter})