C# MVC HTML ActionLink在URL中插入大量%20
我使用的是C#ASP MVC3,我正在生成一个菜单,其中包含通过castle windsor传递的参数 当我在本地开发和测试时,从这段代码生成的URL很好:C# MVC HTML ActionLink在URL中插入大量%20,c#,xml,asp.net-mvc,castle-windsor,xdt-transform,C#,Xml,Asp.net Mvc,Castle Windsor,Xdt Transform,我使用的是C#ASP MVC3,我正在生成一个菜单,其中包含通过castle windsor传递的参数 当我在本地开发和测试时,从这段代码生成的URL很好: @foreach(var menuItem in Model.MenuItems) { var dic = new RouteValueDictionary(); foreach (var item in menuItem.QueryValues)
@foreach(var menuItem in Model.MenuItems)
{
var dic = new RouteValueDictionary();
foreach (var item in menuItem.QueryValues)
{
dic.Add(item.Key, item.Value);
}
<li>@Html.ActionLink(menuItem.Name, menuItem.ControllerAction, dic)</li>
}
在与URL一起传递的每个参数之间
不完全确定显示哪些方面有助于解决问题。它可能是web.config中使用的xdt:Transform:Replace或完全不同的东西。如果您能提供任何帮助,我们将不胜感激
谢谢
更新:我在正在生成的链接中找到了导致所有这些空格的原因。XML替换在执行替换时在XML文件中添加了返回和空格。我将暂时不讨论这个问题,因为这种情况并不理想,所以问题有点变为如何阻止xdt:Replace添加这些不需要的空格和返回?在与一些人交谈并进行大量搜索后,我发现这是SP1之前的visual studio 2010中的一个bug。由于正在构建和发布应用程序的计算机尚未安装SP1(但需要升级),这就是问题所在
为了使缺陷成为无因素,我为字符“,”\r“,“\n”添加了一个修剪,以删除被替换项中的任何空白。在与一些人交谈并进行大量搜索后,我发现这是SP1之前visual studio 2010中的一个缺陷。由于正在构建和发布应用程序的计算机尚未安装SP1(但需要升级),这就是问题所在
为了使bug成为一个无因素,我为字符“,”\r“,“\n”添加了一个修剪,以删除被替换项中的任何空白。因此实际答案在于。nchar类型的末尾有空格,Asp.net将其编码为HTTP“%20” 因此,真正的答案在于。nchar类型的末尾有空格,Asp.net将其编码为HTTP“%20”
%20
是空空间的HTML编码。你确定你正在使用的参数没有空格吗?除了@AndreCalil评论的内容之外,%0D%0A
对Windows换行符进行编码。@Oded这是一个很好的观点,我忽略了这一部分。David,您是否在本地和测试服务器上使用相同的数据源?都来自web.config文件。我使用xml文档转换来允许每个环境都有自己的配置,因此在主配置标记中有
,在需要替换的标记中有
。在本地,这不会生成这些空格和换行符。我尝试过在菜单本身和xml中重新调整格式,但没有找到问题所在。我去检查了服务器上的web.config文件,它添加了在执行替换操作时通常不存在的空格和返回。我在服务器上动态编辑了这些内容,它似乎解决了链接生成中的问题。%20
是空空间的HTML编码。你确定你正在使用的参数没有空格吗?除了@AndreCalil评论的内容之外,%0D%0A
对Windows换行符进行编码。@Oded这是一个很好的观点,我忽略了这一部分。David,您是否在本地和测试服务器上使用相同的数据源?都来自web.config文件。我使用xml文档转换来允许每个环境都有自己的配置,因此在主配置标记中有
,在需要替换的标记中有
。在本地,这不会生成这些空格和换行符。我尝试过在菜单本身和xml中重新调整格式,但没有找到问题所在。我去检查了服务器上的web.config文件,它添加了在执行替换操作时通常不存在的空格和返回。我在服务器上动态编辑了这些,它似乎解决了链接生成中的问题。我在VS2015中也有这个错误。还不知道修复的是什么。我在VS2015中也有这个bug。还不知道解决办法是什么。
%0D%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20