Enlace de modelo personalizado de ASP.NET: fecha y hora
El problema
En este punto, tengo un problema en el que mi acción Obtener intenta leer un parámetro DateTime en un formato diferente que se envía.
Mientras que el DateTime enviado tiene este formato:0:dd/MM/yyyy
El Get Actions espera:0:MM/dd/yyyy
La solución (tal vez)
Para cambiar lo que espera la acción Obtener, estoy usando un enlace de modelo personalizado.
La acción GET
public async Task<IActionResult> Details(int? id, [ModelBinder(typeof(PModelBinder))]DateTime date)
La clase ModelBinder
Ahora aquí hay algunas cosas que faltan y no sé cómo completarlo correctamente:
public class PModelBinder : IModelBinder
{
public Task BindModelAsync(ModelBindingContext bindingContext)
{
string theDate = bindingContext.HttpContext.Request.QueryString["date"];
//What should I write inside the []?
//I've tried QueryString["date"] which is the name of the parameter but it says is wrong
DateTime dt = new DateTime();
bool success = DateTime.TryParse(date); //Should I apply ParseExact? How should I do it?
if (success)
{
return new //what should I be returning here? dt?
}
}
}
Tengo varias preguntas marcadas como comentarios en el código anterior, ya que estoy empezando a entender el enlace de modelo personalizado. Espero que alguien pueda darme algún consejo.
Estoy siguiendo este artículo:
https://weblogs.asp.net/melvynharbour/mvc-modelbinder-and-localization
Pero es de2008 !!!, Aunque parece válido ya que es exactamente el problema que tengo con mi Acción GET (diferentes formatos de fecha)
Actualización: información adicional
La fecha del parámetro se define como:
[DisplayFormat(DataFormatString = "{0:dd/MM/yyyy}", ApplyFormatInEditMode = true)]
public DateTime FechaLInicioLiq { get; set; }
y la construcción de URL al llamar a esa Acción GET tiene esta estructura para el parámetro de fecha:
date=10%2F11%2F2017%200%3A00%3A00