實際上並非微不足道的問題。我忽略了連字符的特殊屬性作爲分隔符。
你可以去定製的路線,這將糾正你的參數(從https://stackoverflow.com/a/14075552/1236044想法):
public class CustomRoute : Route
{
private String _separator;
public CustomRoute(string url,
RouteValueDictionary defaults,
RouteValueDictionary constraints,
RouteValueDictionary dataTokens,String separator,IRouteHandler hdl)
: base(url, defaults, constraints, dataTokens, hdl)
{
_separator = separator;
}
protected override bool ProcessConstraint(HttpContextBase httpContext,
object constraint, string parameterName, RouteValueDictionary values,
RouteDirection routeDirection)
{
if(((string)values["sublocationurl"]).Contains(_separator))
{
var wholeParams = String.Format("{0}-{1}-{2}", values["sublocationurl"],_separator, values["villaurl"]).Split(new[]{_separator},StringSplitOptions.None);
values["sublocationurl"] = wholeParams[0].Trim('-');
values["villaurl"] = String.Join(_separator, wholeParams.Skip(1)).Trim('-');
}
return base.ProcessConstraint(httpContext, constraint,
parameterName, values, routeDirection);
}
}
路線然後可以註冊這樣的:
var separator = "bali";
routes.Add("villadetail",
new CustomRoute("{sublocationurl}-"+separator+"-{villaurl}-details",
new RouteValueDictionary(),
new RouteValueDictionary{{ "sublocationurl", @".+"}},
new RouteValueDictionary()
, separator, new System.Web.Routing.PageRouteHandler("~/VillaDetail.aspx",false)));
希望這將有助於
----------上一個非工作答案
Yo你可能會試圖給你的sublocation url參數添加一個正則表達式約束來聲明它不能包含「bali」。
事情是這樣的:對於{} villaurl
routes.MapPageRoute(
"villadetail",
"{sublocationurl}-bali-{villaurl}-details",
"~/VillaDetail.aspx",
true, // checkPhysicalUrlAccess, value at your will
defaults:new RouteValueDictionary {},
constraints: new RouteValueDictionary { { "sublocationurl", @"((?!bali).)*"}})
限制值是不是我的選擇。我只需要一些路由來獲得正確的值。 :( – 2013-03-06 02:03:02
@vhinnterrible我的答案沒有限制{villaurl}上的值,它限制{sublocationurl}上的值。你試過了嗎?對於路由模式,如果你想獲得正確的值,你不能允許sublocationurl包含' bali' – jbl 2013-03-06 07:59:14
ooops ..抱歉,我忽視了,我專注於villaurl。反正,現在嘗試它,並導致「服務器錯誤'/'應用程序。資源無法找到。」:( – 2013-03-06 10:28:49