2012-01-12 19 views
5

Ho una pagina Web che utilizza un filtro dell'intervallo di date, l'intervallo di date selezionato viene passato al controller quando l'utente fa clic sul link di azione 'filtro' e il controller restituisce ' indice 'visualizza con i dati del modello filtrato.Passare le date dalla vista al controller mvc/C#

View

@Html.ActionLink("Filter", "FilterDateRange", new { from = Url.Encode(Model.FromDate.ToString()), to = Url.Encode(Model.ToDate.ToString()) }, null) 

controller

public ActionResult FilterDateRange(string from, string to) 
{ 
    var fromDate = DateTime.Parse(HttpUtility.UrlDecode(from)); 
    var toDate = DateTime.Parse(HttpUtility.UrlDecode(to)); 

    //do stuffs 

    return View("Index", statsPages); 
} 

La mia domanda è: esiste un modo più elegante per fare questo? Attualmente il valore della data viene codificato url nella vista e quindi url decodificato nel controller, preferisco che il metodo all'interno del controller prenda i parametri di data e ora piuttosto che le stringhe, sembra un po 'hacky così com'è.

Grazie.

risposta

4

Perché non utilizzare solo i parametri DateTime?

@Html.ActionLink("Filter", "FilterDateRange", new { from = Model.FromDate, to = Model.ToDate }, null) 

public ActionResult FilterDateRange(DateTime from, DateTime to) 
{ 
    var fromDate = from; 
    var toDate = to; 

    //do stuffs 

    return View("Index", statsPages); 
} 

Se si lascia che il modello di legante fare la sua cosa, non dovrete preoccuparvi di codifica, decodifica, o analisi.

+0

Sì, questo funziona grazie. Immaginavo che non si potesse passare indietro la data grezza in quanto avrebbe corrotto l'URL, ma sembra che il raccoglitore di modelli lo gestisca come hai detto. – RobJohnson

Problemi correlati