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?

È stato utile?

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.

    .
  1. Strada del sottoclasso e sovrascrittura GetVirtualPath (), Sostituzione di Pasedroute.bind () con un'implementazione personalizzata.
  2. sottoclasse routebase e crea un'implementazione del percorso personalizzata.
  3. 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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top