我有一个ASP.NET MVC应用程序。在一种形式中,我对字符Ñ的编码有疑问。如下图所示:
Ñ
此表单具有多个对象,例如TextBoxFor和select等。最初在首次加载页面时,所有HTML对象(TextBoxFor,Select等)中的字符都正确显示。填写完所有字段后,单击“保存”按钮以将值保存到数据库中。然后重新加载页面,并保留所有字段的填充(它们不会清除)。
一旦重新加载页面,Ñ字符将显示为:
Ñ
在下面的html Select对象中:
<select class="form-control" id="street" name="street"></select>
但是在其他对象中,例如TextBoxFor正确显示为Ñ:
@Html.TextBoxFor(model => model.DepartmentName, new { @class = "input-xmediumlarge" }, (bool)( !ViewBag.ReadOnly), true)
Html Select对象从查询填充到数据库。当用户在其中键入字符时,将立即进行搜索(使用JQuery),并显示包含该字符串的项目以供选择。即时显示包含Ñ字符的项目。问题是一旦保存值并重新加载页面。 Ñ字符在html选择对象中显示不正确。它仅在选择对象中发生。在所有其他对象中,Ñ字符正确显示。
我已经在页面的顶部注明了以下声明:
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta charset="utf-8" />
此外,cshtml视图另存为UTF-8。我已经通过执行以下步骤使用Notepad ++进行了检查:在记事本中打开文件。点击“另存为...”。在“编码:”组合框中,我看到了当前文件格式UTF-8。
所以我在做什么错呢?
UPDATED:我已经通过Internet浏览器(chrome,firefox等)调试和检查了生成的源代码,我看到的问题是使用jquery设置de html select值时,如下所示:
$('#street').val('@Model.street');
以上行由互联网浏览器解释如下:
$('#street').val('PEÑALBES');
因此在html select对象中显示为:
PEÑALBES
代替PEÑALBES。
最后,我已经通过应用下面的here找到的javascript函数解决了它:
function decodeHtml(html) {
var txt = document.createElement("textarea");
txt.innerHTML = html;
return txt.value;
}
$('#street')。val(decodeHtml('@ Model.street'));
而不是下面的:
$('#street')。val('@ Model.street');
下面有其他有趣的帖子在谈论: