Frage

Erste post Zeit,

Ich habe das Spiel mit MVC abit...Ich habe eine Ansicht, die mehrere Eingabefelder, einige dieser Felder kann leer sein, auf der post.

Die action-Methode im controller für die post sieht so etwas wie dieses

public ActionResult Filter(int? id, string firstName, string lastName, bool? isMember)

Ich habe mit dem DynamicQuery Erweiterung, die schon herumliegen, um eine dynamische Linq-Abfragen an meine Datenbank und ich habe gekapselt diese in die Suche Objekt, das übergeben wird, der data access layer für execusion.

Allerdings habe ich auch eine angepasst ViewData-Objekt, das übergeben wird, zurück in die Ansicht für die Anzeige der Eingabewerte und die Ergebnisse der Abfrage.

Es sieht alles ein wenig böse im code, wie ich habe, um sowohl die Suche Objekt-Eigenschaften UND die ViewDatas.

public ActionResult Filter(int? id, string firstName, string lastName, bool? isMember)  { 
var search = new Search { 
Id = id, 
FirstName = firstName, 
LastName = lastName, 
Member =  isMember 
}; 

var memberViewData = new MemberViewData { 
Id = id, 
FirstName = firstName, 
LastName = lastName, 
Member =  isMember
}; 

memberViewData.Results = _dataRepository.GetMember(search); 

return View("Search", memberViewData); 

}

Bin ich über-denken und sollte wirklich nur übergeben Sie die Werte für die data-access-layer, und füllen Sie die ViewData der controller, oder gibt es eine viel elegantere Muster oder Praxis, die ich verwenden könnte?

Sorry, wenn dies scheint dump, nicht allot von Menschen, bounce Ideen aus, und Zeit, um zu Graben in den Rahmen.

War es hilfreich?

Lösung

Nach Ihrem snippet MemberViewData Klasse hat die Eigenschaft Results zusätzlich zu den Eigenschaften der Klasse Suchen.So die erste Schritt wäre MemberViewData ableiten von Such-und definieren einen Konstruktor, akzeptiert Search-Instanz als parameter und ordnet es die grundlegenden Eigenschaften von es.Als Nächstes würde ich die Aktion ändern, die Methode so:

public ActionResult Filter(Search search)  
{ 
    return View("Search", new MemberViewData(search) 
    {
        Results = _dataRepository.GetMember(search)
    }); 
}

Andere Tipps

Verwenden modelbinder zum binden von Daten

Wie Tadeusz erwähnt, einen ModelBinder kann dabei helfen, die MemberViewData für Euch, das lassen Sie nur die Ergebnisse abgerufen werden.

Sie könnte auch entscheiden, erstellen einer Präsentation-Dienst, der versteht, wie man diese Daten anzeigen, Objekt und einfach delegieren, um es.Ich würde es vorziehen, den Modell binder Ansatz hier aber.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top