UriMapper问题

时间:2010-04-16 17:30:26

标签: silverlight silverlight-3.0

我有以下xaml(为了简洁起见,删除了不必要的标记):

<navigation:Frame x:Name="ContentFrame" >
    <navigation:Frame.UriMapper>
        <uriMapper:UriMapper>
            <uriMapper:UriMapping Uri="/{pageName}" 
                                  MappedUri="/Views/{pageName}.xaml"/>
            <uriMapper:UriMapping Uri="/FMChart/{metricID}/{orgID}" 
                                  MappedUri="/Views/FMChart.xaml?metricID={metricID}&orgID={orgID}"/>
        </navigation:Frame.UriMapper>
    </navigation:Frame.UriMapper>
</navigation:Frame>

我正在动态创建HyperLinkBut​​ton对象(在代码中),如下所示:

int metricID = 1;
int orgID = 1;

HyperlinkButton button = new HyperlinkButton();
button.Name        = Guid.NewGuid().ToString();
button.TargetName  = "ContentFrame";

// this string doesn't work
string url = string.Format("/FMChart/{0}/{1}", metricID, orgID);

button.NavigateUri = new Uri(url, UriKind.Relative);

当我点击bbutton时,浏览器会呈现一个空白页面,最终会向我显示一个非常长的堆栈跟踪(InvalidOperation异常)。如果我从指定的行中取出参数:

string url = "/FMChart";

...它按预期工作(调出所需的页面)。

我也尝试过以下字符串:

  

/ FMChart / {0}&安培; {1}
  / FMChart / {0}&安培;安培; {1}

我做错了什么?

2 个答案:

答案 0 :(得分:1)

UriMapping不正确: -

<uriMapper:UriMapping Uri="/FMChart/{metricID}/{orgID}" 
    MappedUri="/Views/FMChart.xaml?metricID={metricID}&orgID={orgID}"/>

应该是: -

<uriMapper:UriMapping Uri="/FMChart/{metricID}/{orgID}" 
    MappedUri="/Views/FMChart.xaml?metricID={metricID}&amp;orgID={orgID}"/>

Xaml是xml,因此需要将&字符编码为&amp;实体。

答案 1 :(得分:0)

来自CodeProject的实际答案是他在BOTTOM处有映射,并且映射的顺序很重要。

只为那些正在寻找的人。