2012-01-12 72 views
5

Tengo una página web que utiliza un filtro de rango de fechas, el intervalo de fechas seleccionado se transfiere al controlador cuando el usuario hace clic en el enlace de acción 'filtro' y el controlador devuelve el ' vista de índice con los datos del modelo filtrado.Pasando fechas desde la vista al controlador mvc/C#

Ver

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

controlador

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); 
} 

Mi pregunta es, ¿hay una manera más elegante de hacer esto? Actualmente, el valor de la fecha se codifica en la url en la vista y luego se decodifica en url en el controlador, prefiero que el método dentro del controlador tome los parámetros de fecha y hora en lugar de cadenas, parece un poco raro como es.

Gracias.

Respuesta

4

¿Por qué no solo usa los parámetros de 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); 
} 

Si deja que el ligante modelo haga su trabajo, usted no tendrá que preocuparse por la codificación, decodificación, o de análisis.

+0

Sí, esto funciona gracias. Supuse que no podría pasar el tiempo de la fecha sin procesar, ya que dañaría la URL, pero parece que la carpeta del modelo maneja esto como usted dijo. – RobJohnson

Cuestiones relacionadas