我想迭代表数据并在表格中对链接进行分析。
表格中的每一行都有类似方式的链接,其中散布着几个不同的ID。我想使用Url工厂为url路由生成模板。
例如
var urlHelper = new UrlHelper(HttpContext.Current.Request...);
//code is a bit handwavy and may not compile
var routeValues = new Dictonary<string,object>();
routeData["action"] = "myAction";
routeData["controller"] = "myAction";
routeData["id1"] = "{0}";
routeData["id1"] = "{2}";
urlHelper.RouteUrl(routeValues);
MSDN REF UrlHelper.RouteUrl http://msdn.microsoft.com/en-us/library/dd505226(v=vs.118).aspx
我认为当我目前使用占位符时,它会对“{”符号进行编码,而我并没有真正解决它。我在项目网址中看到了一个“{”,所以我想避免解码这些问题。
我也非常希望避免放入myId1 = -9999,myId = -9999,myString =' - 9999'的解决方案,尽管如果它是nessecary,这是一个可接受的解决方案。
使用占位符生成路由有一个很好的解决方案吗?
答案 0 :(得分:0)
这些是必须进行Url编码的特殊字符,因此Url Helper方法将始终对这些字符进行编码。解决方法可能是Url使用占位符解码生成的URL。然后你需要进行任何替换,自己手动url编码值!
像这样生成网址模板(或使用任何其他UrlHelper方法而不是Url.RouteUrl
):
var routeValues = new RouteValueDictionary();
routeValues["action"] = "myAction";
routeValues["controller"] = "myAction";
routeValues["id1"] = "{0}";
var urlTemplate = HttpUtility.UrlDecode(Url.RouteUrl(routeValues));
这将生成(使用MVC中的默认路由)url模板/myAction/myAction?id1={0}
。然后在替换占位符时,您需要自己对字符串值进行url编码:
String.Format(urlTemplate, HttpUtility.UrlEncode("123"))
哪会产生/myAction/myAction?id1=123
。
我会小心这种方法,因为您需要手动将值转换为字符串并对其进行编码。这也假设您的网址模板中的硬编码值如myAction
是安全的,并且不需要进行网址编码(因为我们正在解码生成的网址)。