0

在我下面的代码中,当 postSummary.SEOFriendlyTitleInURL 包含中文字符时,这些字符将被编码在 url 中。

@Html.ActionLink(
    postSummary.Title,
    "View",
    new
    {
        id = postSummary.Id,
        friendlyTitle = postSummary.SEOFriendlyTitleInURL
    })

尽管该 url 在 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 时完成。但是通过观察 Fiddler 在通过包含中文字符的 URL 请求页面时,似乎该 URL 将被自动编码(可能通过网络浏览器)。为了可读性,我选择让 Web 浏览器完成编码工作。

4

1 回答 1

0

<a>就标签中生成的内容而言,浏览器之间没有区别;唯一的区别在于浏览器的显示方式。这里没有什么可以改变的;Html.ActionLink()正确编码/未编码。

于 2012-09-05T12:28:27.503 回答