在我的下面的代码中,当postSummary.SEOFriendlyTitleInURL包含中文字符时,这些字符将在网址中编码。
@Html.ActionLink(
postSummary.Title,
"View",
new
{
id = postSummary.Id,
friendlyTitle = postSummary.SEOFriendlyTitleInURL
})
虽然该网址将在Google Chrome和Firefox中显示为原始字符,但它是IE中的编码字符串。我想阻止ActionLink方法的默认编码行为,因为我可以直接在地址栏中键入那些未编码的字符。所以我认为它们在URL中是合法的。
我可以简单地手动构建链接,但最好是为了保持一致性而生成:
<a href="/post/@postSummary.SEOFriendlyTitleInURL/@postSummary.Id">@postSummary.Title</a>
修改
我目前的解决方案:通过使用Html.ActionLink结合Server.UrlDecode方法,我告诉它不要编码任何字符,而不是阻止框架只编码非ASCII字符。如果某些字符需要进行百分比编码,则它们只能出现在“friendlyTitle”片段中。因为该片段仅用于可读性,所以我用短划线字符替换这些字符。
这样的替换字符包括
但是,非ASCII字符在某些时候应该进行百分比编码,因为它们在URI中无效,并且最好在生成URL时完成。但是当通过包含中文字符的URL请求页面时观察Fiddler,似乎URL将被自动编码(可能通过Web浏览器)。为了便于阅读,我选择让Web浏览器进行编码工作。
答案 0 :(得分:0)
对于<a>
标记中生成的内容,浏览器之间没有区别;唯一的区别在于浏览器如何显示它。这里没有什么可以改变的; Html.ActionLink()
正确编码/不编码。