Pregunta

Tengo pocos valores de ruta vacíos que quiero en la cadena de consulta:

var routeValues = new RouteValueDictionary();
routeValues.Add("one", "");
routeValues.Add("two", null);
routeValues.Add("three", string.Empty);

Si lo pasa a UrlHelper.RouteUrl(), ignora todos los valores y la cadena de consulta generada está vacía.Sin embargo, las URL como /?one=&two=&three= son perfectamente válidas.¿Cómo puedo hacer eso?

¿Fue útil?

Solución

Este comportamiento está integrado en la clase de ruta predeterminada.Se llama al método parsedroutee.bind () donde hace este cheque:

if (IsRoutePartNonEmpty(obj2))
{
    acceptedValues.Add(key, obj2);
}

¿Cuál hace esto:

private static bool IsRoutePartNonEmpty(object routePart)
{
    string str = routePart as string;
    if (str != null)
    {
        return (str.Length > 0);
    }
    return (routePart != null);
}

Esto evita efectivamente cualquier valor de cadena de consulta que se envíe si están vacíos.Todo lo que hace es privado, estático, interno y, de lo contrario, imposible de anular.Entonces, realmente solo hay 2 opciones para anular este comportamiento.

  1. ruta de subclase y anule getVirtualpath (), reemplazando al parsedroute.bind () con una implementación personalizada.
  2. subclase de buquebase y cree una implementación de ruta personalizada.
  3. Supongo que la tercera opción es dejarlo solo, ya que otros han señalado que esto no es realmente un problema, ya que tener un parámetro vacío en la cadena de consulta tiene poco o ningún valor.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top