我正在尝试.NET 4.0的新功能 - 网址路由但无法获取网址中传递的信息。以下是代码:
GLOBAL.ASPX.CS
protected void Application_Start(object sender, EventArgs e)
{
SetRouting(RouteTable.Routes);
}
private void SetRouting(RouteCollection routeCollection)
{
routeCollection.MapPageRoute("Company",
"Company/{CompanyName}",
"~/Asset/RequestForm.aspx", true, new RouteValueDictionary { { "CompanyName", "?CompanyName" } });
routeCollection.MapPageRoute("Deal",
"Company/{CompanyName}/{DealName}",
"~/Asset/RequestForm.aspx", true, new RouteValueDictionary { { "DealName", "?DealName" } });
routeCollection.MapPageRoute("ClientRoute",
"Client/{ClientCompanyName}",
"~/User/Login.aspx", true, new RouteValueDictionary { { "ClientCompanyName", "?ClientCompanyName" } });
}
的Login.aspx:
private string CompanyName {
get
{
if (Page.RouteData.Values["ClientCompanyName"] == null)
{
return null;
}
return Page.RouteData.Values["ClientCompanyName"].ToString();
}
}
现在,即使我在网址中使用Client / Google,上面提到的属性也会返回null。当我重置IIS(IIS 6)并第一次执行它时,它返回值。否则它会给出null。
任何CLUE ??
答案 0 :(得分:0)
routeCollection.MapPageRoute("ClientRoute",
"Client/{ClientCompanyName}",
"~/User/Login.aspx",
true,
new RouteValueDictionary {{ "ClientCompanyName", "?ClientCompanyName"}};
这实际上没有多大意义。 RouteValueDictionary用于指示默认值,因为未提供URL中的“ClientCompanyName”值。在这里,您说您希望“?ClientCompanyName”成为默认值。例如,如果您导航到http://baseUrl/Client,则默认为http://baseUrl/Client/?ClientCompanyName(字面意思)。我想你想要实际更改?ClientCompanyName到你希望默认的实际“真实”公司名称。我的建议是不要在这种情况下使用默认值,只使用带有3个参数的MapPageRoute覆盖(字符串,字符串,字符串)。我发现在很多情况下这已经足够了。此外,这里有一个扩展方法,您可以使用Request对象来帮助您:
public static string GetDataFromRouteOrRequest(this HttpRequest request, string key)
{
if (request.RequestContext.RouteData.Values.ContainsKey(key))
return request.RequestContext.RouteData.Values[key].ToString();
return request[key];
}