【问题标题】:How to display an apostrophe in HTML for viewmodel string property如何在 HTML 中为 viewmodel 字符串属性显示撇号
【发布时间】:2016-03-05 13:55:45
【问题描述】:

我的 视图使用布局模板在每个页面的顶部显示客户姓名。这可以正常工作,除非为 name 属性分配了一个包含撇号的值。该视图显示撇号的 ascii 代码,而不是实际的撇号。例如:

如果客户名称设置为“客户名称”,视图会将名称呈现为"Client's Name",而不是“客户名称”

布局模板代码:

    @helper ClientName()
    {
        if (Session["CurrentClient"] != null)
        {                                
            @(((ClientModel)Session["CurrentClient"]).Name);
        }
        else
        {
            @String.Format("{0}", "None");
        }
    }

    @Html.ActionLink("Client[" + @ClientName().ToString() + "]", "Index", "Home", null, new { @class = "navbar-brand" })

如何将字符串值转换为 HTML 以便显示撇号?

【问题讨论】:

  • "视图将名称呈现为"Client's Name"" 但是您只看到一个撇号因为' 是一个HTML 实体,或者HTML 是否包含' 而您实际上看到' on屏幕?您确定 Session["CurrentClient"]).Name 尚未进行 HTML 编码吗?
  • 我确定 Session["CurrentClient"]).Name 尚未经过 HTML 编码。该值设置为来自控制器中数据库的字符串值。所以对于“国王的女儿”的价值,我实际上看到的是“国王的女儿”
  • 见stackoverflow.com/a/10146258/227299。另外,张贴一些证明它尚未编码的证据。如果您尝试@Html.ActionLink(HttpUtility.HtmlDecode("Client[" + @ClientName().ToString() + "]"), "Index", "Home") 并且它有效,则意味着它已经编码。

标签: asp.net html asp.net ascii


【解决方案1】:

根据this answer ActionLink 对传入的内容进行编码。因此,它被双重编码。

检查@ClientName().ToString() 的值,它可能已经被编码,因为助手默认对其输出进行编码;您可能需要取消编码,或者不从您的助手中对其进行编码。

一个解决方案是让你的助手not escape its content

@{ WriteLiteral(((ClientModel)Session["CurrentClient"]).Name); }

或

@Html.Raw(((ClientModel)Session["CurrentClient"]).Name))

如果您是must un-encode the results 或@ClientName().ToString(),请使用

@Html.ActionLink(
   "Client[" + 
           HttpUtility.HtmlDecode(@ClientName().ToString()) +
           "]",
   "Index", "Home")

【讨论】:

  • 我猜它毕竟是编码的。我知道数据库中的数据没有被编码,这就是为什么我坚持认为它不是。我在调试器中查看了它以确保。猜测 ActionLink() 正在对其进行编码。感谢您的帮助。
  • @ihatemash 您能否添加评论说明您如何解决问题,因为我提供了两种可能性?
  • 我使用了@Html.ActionLink("Client["+HttpUtility.HtmlDecode(@ClientName().ToString()) + "]", "Index", "Home") 并修复了问题。
猜你喜欢
  • 1970-01-01
  • 2011-07-11
  • 1970-01-01
  • 1970-01-01
  • 2017-10-04
  • 1970-01-01
  • 2022-12-11
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多