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

Blazor/Razor/MVC中Html.TextAreaFor特殊字符转义后无法保存如何解决?

问题根因

ASP.NET MVC/Razor 中Html.TextAreaFor辅助方法默认会对绑定的属性值做一次HTML编码处理,若你存储的AnswerText本身就是已经经过HTML编码的内容(例如已将&转为&存储),辅助方法会对内容二次编码,最终展示为&而非预期的&。
你之前尝试的方案错误原因如下:

  • 单独定义临时变量text绑定:生成的textarea标签name属性为text,和模型字段AnswerText不匹配,提交时模型绑定无法正确映射,导致数据无法保存
  • 表达式内直接调用HtmlDecode:TextAreaFor要求绑定参数为成员访问表达式,不支持直接调用方法,因此直接抛出运行异常

可用解决方案

方案1:修正数据存储逻辑(优先推荐)

在数据入库时直接存储原始明文内容,不要提前做HTML编码,仅在前端展示非输入类内容时再做编码处理。此时View层直接使用原有代码即可正常运行:

@Html.TextAreaFor(m => m.AnswerText, new { @class="Textarea", placeholder=Model.QuestionPlaceholder })

TextAreaFor会对原始明文做一次正确编码,提交时也会自动正确映射到模型字段,无兼容问题。

方案2:使用原生textarea标签兼容已编码的存储内容

如果存储逻辑无法修改,必须读取已编码的内容,可以放弃TextAreaFor辅助方法,手动写原生textarea标签,保证name属性和模型字段一致即可:

<textarea class="Textarea" placeholder="@Model.QuestionPlaceholder" name="AnswerText">
    @Html.Raw(HttpUtility.HtmlDecode(Model.AnswerText))
</textarea>
  • HttpUtility.HtmlDecode将存储的已编码内容转回原始明文
  • Html.Raw告诉Razor不要对输出内容二次编码
  • name="AnswerText"保证提交时可以正确绑定到模型字段,不影响保存逻辑

方案3:控制器层提前解码属性值

如果希望继续使用TextAreaFor辅助方法,可以在控制器将模型传给View之前,提前对AnswerText做解码处理:

// 控制器中获取到模型数据后执行
model.AnswerText = HttpUtility.HtmlDecode(model.AnswerText);
return View(model);

View层直接使用原有代码即可,展示和提交逻辑都不受影响。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 23:24:01