You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

formselect下拉列表URL编码问题:如何保留单引号原始格式?

解决ASP.NET FormSelect标签助手自动编码单引号的问题

问题核心:使用formselect标签助手绑定包含单引号的选项时,标签助手会自动将单引号编码为&#x27;,导致生成的<option>值和文本都被转义,需要保留原始单引号格式。

以下是几种可行的解决方法:

方法一:手动构建解码后的SelectListItem集合

在控制器中处理数据源时,对选项的文本和值进行HTML解码,再传递给视图:

// 假设countriesList是原始的国家数据集合
ViewBag.Countries = countriesList.Select(item => new SelectListItem
{
    Text = HttpUtility.HtmlDecode(item.TextColumn),
    Value = HttpUtility.HtmlDecode(item.TextColumn)
});

视图中直接绑定处理后的集合:

<formselect id="CountryDropdown" class="form-select form-control form-control-sm"
            asp-for="Country"
            asp-items="@ViewBag.Countries"></formselect>

方法二:跳过标签助手,手动生成

在视图中直接循环数据源,使用Html.Raw输出原始文本,避免自动编码:

<select id="CountryDropdown" class="form-select form-control form-control-sm" asp-for="Country">
    @foreach (var country in ViewBag.Countries)
    {
        <option value="@Html.Raw(country.TextColumn)">@Html.Raw(country.TextColumn)</option>
    }
</select>

方法三:自定义标签助手(全局复用)

创建自定义标签助手,重写默认的编码逻辑,适合需要全局禁用自动编码的场景:

[HtmlTargetElement("formselect")]
public class UnencodedFormSelectTagHelper : SelectTagHelper
{
    public UnencodedFormSelectTagHelper(IHtmlGenerator generator) : base(generator)
    {
    }

    public override void Process(TagHelperContext context, TagHelperOutput output)
    {
        base.Process(context, output);
        // 取消自动编码,直接输出原始内容
        output.Content.SetHtmlContent(output.Content.GetContent());
    }
}

在_ViewImports.cshtml中注册自定义标签助手:

@addTagHelper *, 你的项目程序集名称

之后使用<formselect>标签时,就不会自动编码特殊字符了。

注意:直接输出未编码内容时,需确保数据源是可信的,避免XSS安全风险。

内容的提问来源于stack exchange,提问作者Edney Holder

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.14 00:02:11