Domanda

tempo Primo post,

Ho giocato in giro con MVC abit ... Ho una visione che ha più campi di input, alcuni di questi campi può essere vuoto sul palo.

Il metodo di azione all'interno del controller per il posto sembra qualcosa di simile

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

Ho usato l'estensione DynamicQuery che è stato calci in giro per eseguire querys Linq dinamici sul mio database e ho incapsulato questo in un oggetto di ricerca che viene passato allo strato di accesso ai dati per execusion.

Tuttavia, ho anche un oggetto Viewdata personalizzato che viene passato indietro alla visualizzazione per la visualizzazione dei valori di ingresso ed i risultati della ricerca.

Sembra tutto un po 'brutto in codice come sto avendo per impostare sia le proprietà di ricerca oggetto e le 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); 

}

Sono oltre pensando che questo e in realtà dovrebbe solo passare i valori al livello di accesso ai dati e popolare il Viewdata nel controller, o c'è un motivo molto più elegante o praticare potrei usare?

Scusate se questo sembra discarica, non assegnare delle persone a rimbalzare idee fuori e il tempo per scavare nel quadro.

È stato utile?

Soluzione

In base al vostro frammento di classe MemberViewData ha la proprietà Risultati oltre alle proprietà di ricerca di classe. Quindi primo passo sarebbe quello di fare MemberViewData derivano dalla ricerca e definire un costruttore che accetta esempio Search come parametro e assegna le sue proprietà di base da esso. Successivo vorrei cambiare il metodo di azione in questo modo:

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

Altri suggerimenti

Utilizza modelbinder per associare i dati

Come Tadeusz accennato, un ModelBinder può aiutare a costruire la MemberViewData per voi, che lascerebbe solo i risultati da prelevare.

Si potrebbe anche decidere sulla creazione di un servizio di presentazione che capisce come costruire questo oggetto di visualizzazione dati e semplicemente delegare ad esso. Io preferirei l'approccio modello di legante qui però.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top