<p>If you have a route:</p>

<pre><code>routes.MapRoute("search", "{controller}/{action}/{filter1}/{filter2}/{filter3}", _
  New With {.filter1 = "", .filter2 = "", .filter3 = ""})
</code></pre>

<p>then in a view satisfied by the route pattern with a url of <code>/member/search/dev/phil/hoy</code>, when you attempt to create another route url with only <code>filter1</code> present i.e.</p>

<pre><code>&lt;%=Url.RouteUrl(New RouteValueDictionary(
  New With {.controller="member",.action="search", .filter1="dev"}))%&gt;
</code></pre>

<p>the result is the current route <code>/member/search/dev/phil/hoy</code>, not the expected trimmed route <code>/member/search/dev</code> </p>

<p>I have managed to work round the issue by using <code>RouteTable.Routes.GetVirtualPath</code> method directly, but does anyone know why it works this way or is it perhaps a bug?</p>

Some people use nested
```
StackPanel
```
s to "solve" this problem, but IMHO that just introduces another problem (code bloat). I think the best way to solve this is to write your own panel that lays out children consecutively in columns. I did this on a previous project and it has a number of advantages:
More readable and terse XAML
Easier to maintain XAML
Faster performance
The usage looked something like this:
```
```
<local:FieldPanel>
    <Label>Field 1:</Label>
    <TextBox/>

    <Label>Field 2:</Label>
    <TextBox/>

    <Label>Field 3:</Label>
    <TextBox/>
</local:FieldPanel>
```
```