RouteValuedology ignora i valori vuoti
-
21-12-2019 - |
Domanda
Ho pochi valori vuoti del percorso che voglio nella stringa di query:
var routeValues = new RouteValueDictionary();
routeValues.Add("one", "");
routeValues.Add("two", null);
routeValues.Add("three", string.Empty);
.
Se lo passerò su UrlHelper.RouteUrl()
Ignora tutti i valori e la stringa di query generata è vuota.Tuttavia, gli URL come /?one=&two=&three=
sono perfettamente validi.Come posso farlo?
Soluzione
Questo comportamento è integrato nella classe di rotta predefinita.Chiama nel metodo Parsedroute.bind () dove fa questo controllo:
if (IsRoutePartNonEmpty(obj2))
{
acceptedValues.Add(key, obj2);
}
.
Quale fa:
private static bool IsRoutePartNonEmpty(object routePart)
{
string str = routePart as string;
if (str != null)
{
return (str.Length > 0);
}
return (routePart != null);
}
.
Questo impedisce efficacemente tutti i valori delle stringhe di query dall'essere in uscita se sono vuoti.Tutto ciò che fa è privato, statico, interno e altrimenti impossibile da sovrascrivere.Quindi, ci sono davvero solo 2 opzioni per ignorare questo comportamento.
- .
- Strada del sottoclasso e sovrascrittura GetVirtualPath (), Sostituzione di Pasedroute.bind () con un'implementazione personalizzata.
- sottoclasse routebase e crea un'implementazione del percorso personalizzata.
Immagino che la terza opzione sia lasciarlo da solo, come altri hanno sottolineato questo non è davvero un problema poiché avere un parametro vuoto nella stringa di query ha un valore basso o nessun valore.