2016-05-15 18 views
0

Ich habe Entitäten BookShelf und Buch. Routing ist: {controller}/{action}/{id}Zurück zu verschiedenen Controllern aus einer Sicht

URL für Bücher aus Regal mit Id = 2 bekommen ist

.../BookShelves/ManageBookShelves?shelfId=2 

Wenn Bücher zurückgegeben werden, ist es möglich, auf den Namen des Buches und Ansicht Details über Buch zu klicken. Dies ist Aktionsmethode eines anderen Controller:

.../Books/Details/1 

Es ist Link auf Details für zurück zum Index-Methode Rückkehr:

@Html.ActionLink("Back", "Index") 

Es funktioniert ok, wenn ich auf Blick Details erhalten Sie direkt von BooksController. Aber wenn ich von BookShelvesController dorthin zu gelangen, muss ich auf bestimmte Regal Liste der Bücher, um wieder zurück, hier:

.../BookShelves/ManageBookShelves?shelfId=2 

Die Frage ist, wie Ansicht Rückkehr zurück zu machen, Auswuchten genannt Aktion/Controller?

Antwort

1

Ich glaube, Bücher und BookShelves hat eine eins zu eins Beziehung. Das heißt, ein Buch darf nur zu einem Buchregal gehören. In diesem Fall müssen Sie jedes Buch in einem Bücherregal in Ihrer Datenbank-Tabelle ablegen, so dass Sie einen BookShelveId in Ihrer Buch-Tabelle (und der Buch-Entitätsklasse) haben.

Wenn Sie auf Ihrer BookDetails-Seite einen Buchdatensatz/-element abrufen, verwenden Sie einfach den BookShelveId-Eigenschaftswert, um den Zurück-Link zu erstellen.

Ihr BookViewModel Unter der Annahme, sieht wie folgt aus

public class BookViewModel 
{ 
    public int Id {set;get;} 
    public string Title { set;get;} 
    public int ShelveId {set;get;} 
} 

Von Ihrem Details zur Aktion-Methode sowie die ShelveId gesetzt.

public ActionResult Details(int id) 
{ 
    var book=db.Books.FirstOrDefault(s=>s.Id==id); 
    if(book!= null) 
    { 
    var vm=new BookViewModel { Id=id,Title=book.Title,ShelveId=book.BookShelveId}; 
    return View(vm); 
    } 
    return View("NotFound"); 
} 

Jetzt in Ihrer Ansicht Verwenden Sie die ShelveId des View-Modells innerhalb Html.ActionLink Methode, um den Back-Link zu erzeugen.

@model BookViewModel 
<h2>@Model.Title</h2> 
<p> 
    @Html.ActionLink("Back","ManageBookShelves","BookShelves", 
              new {shelfId=Model.ShelveId},null) 
</p> 

EDIT:Gemäß dem Kommentar. Wenn Sie ein anderes Verhalten der Zurückschaltfläche bevorzugen, das auf der Position basiert, an der auf die Verknüpfung geklickt wurde, können Sie diese Informationen in der Abfragezeichenfolge übergeben.

So aus der Bücher Indexseite

@Html.ActionLink("View Details","Details","Book", new {@id=item.Id},null) 

Und von der bookshelve Seite

@Html.ActionLink("View Details","Details","Book", 
       new {@id=item.Id,shelveId=Model.BookShelveId },null) 

haben nun Ihre Daten Methode akzeptiert 2 params und ein NULL-Werte zulässt und wir werden die ShelveId nullable machen.

public class BookViewModel 
{ 
    public int Id {set;get;} 
    public string Title { set;get;} 
    public int? ShelveId {set;get;} 
} 

und die Aktionsmethode.

public ActionResult Details(int id, int? shelveId) 
{ 
    var vm = new BookViewModel{ Id=id }; 
    // to do : Get book entity and map to view model.(Except the ShelveId property) 
    if(shelveId!=null) 
    { 
    vm.ShelveID=shelveId; 
    } 
    return View(vm); 
} 

Und in der Ansicht, prüfen nun das ShelveId Eigentum und macht die Links

@model BookViewModel 
@if(Model.ShelveId==null) 
{ 
    <p>@Html.ActionLink("Back to books","Index","Book")</p> 
} 
else 
{ 
    <p>@Html.ActionLink("View Details","Details","Book", 
       new {@id=item.Id,shelveId=Model.BookShelveId },null)</p> 
} 
+0

ich diese Ansicht in zwei Wegen: 1) direkt von Büchern/Details/id; wenn ich auf "Zurück" klicke, sollte ich zu Books/Index zurückkehren; 2) von/BookShelves/ManageBookShelfs? ShelfId und dann Books/Details/id. Wenn ich hier auf "Zurück" klicke, sollte ich zu BookShelves/ManageBookShelfs? shelfId zurückkehren. Wie kombiniert man diese zwei Varianten? – MyName

+0

Werfen Sie einen Blick auf die aktualisierte Antwort. – Shyju

+1

Vielen Dank für Ihre Hilfe! Es funktioniert wirklich – MyName

Verwandte Themen