TextBoxFor字符编码(斯堪的纳维亚字母)

时间:2013-06-07 09:34:51

标签: asp.net-mvc-3 asp.net-mvc-4

我使用TextBoxFor在MVC视图上绑定模型ti编辑:

@Html.TextBoxFor(m => m.Company)

假设公司名称是Andenæs(或任何scandvian名称,如Lønø),TextBoxFor将其编码为如下截图:

decoding problem

如何解决这个问题?

1 个答案:

答案 0 :(得分:0)

  

TextBoxFor encoded

您感到困惑TextBoxForLabelForLabelFor帮助器(这是您在此处使用的)只是将模型属性的值直接输出到HTML页面。为了安全地执行此操作,需要对此值进行HTML编码。这就是为什么你看到这个Andenæs。这是安全的,浏览器将正确呈现它。 HTML应该由浏览器而不是人类来读取和解释,因此只要看到浏览器的人看到正确的文本就可以了。

据说没有办法改变内置助手的这种行为。如果你需要实现这一点,你将不得不编写自定义帮助程序并手动编码所有内容(完全不推荐)。


更新:

根据您在评论部分中显示的内容,您无法使用任何TextBoxFor帮助程序。您正在使用一些自定义编辑器模板,您在其中硬编码输入字段并错误地编码值:

<input type="text" class="string @ViewData.ModelMetadata.PropertyName" value="@ViewData.TemplateInfo.FormattedModelValue" name="@string.Format("{0}-{1}", ViewData.ModelMetadata.ContainerType.Name, ViewData.ModelMetadata.PropertyName)" id="@ViewData.TemplateInfo.HtmlFieldPrefix" dafault-value="@ViewData.ModelMetadata.DisplayName" />

而您应该使用TextBox帮助程序来确保正确编码该值:

@Html.TextBox(
    "", 
    ViewData.TemplateInfo.FormattedModelValue, 
    new {
        id = ViewData.TemplateInfo.HtmlFieldPrefix,
        @class = "string " + ViewData.ModelMetadata.PropertyName",
        dafault_value = ViewData.ModelMetadata.DisplayName
    }
)