MVC 中的显示属性在 HTML 中不显示西里尔字符

Display attribute in MVC doesnt display cyrillic in the HTML

我尝试呈现西里尔文字“име”而不是数据库 table 中的列名 (FirstName),但我收到了一些奇怪的符号“Èìå”。我的 webconfig 中有一个 <globalization fileEncoding="utf-8" />,我还检查了包含代码的文件,它们都保存为 UTF-8。

我很确定问题是由 ModelRS.edmx 中的某些内容或此层次结构中包含的文件引起的。下面是提供更多代码的两个屏幕截图。

我是否应该在 HTML 中对“Име”进行硬编码,因为我尝试过并且工作正常,但感觉不太好,这是我要向考试评委展示的项目?

我的 html 块(另请参阅屏幕截图以获取全面信息):

@using PagedList.Mvc;
@model PagedList.IPagedList<Rating_System.Models.tblTeacher>

@Html.DisplayNameFor(model => model.First().FirstName)  
// I have .First() because the web page has pagination 

我的控制器:

public class TeachersController : Controller
    {
        private RSEntities db = new RSEntities();

        // GET: Teachers
        public ActionResult Index(int page = 1, int pageSize = 8)
        {
            List<tblTeacher> listTeachers = db.tblTeachers.ToList();
            PagedList<tblTeacher> model = new PagedList<tblTeacher>(listTeachers, page, pageSize);
            //return View(db.tblTeachers.ToList()); 
            return View(model);
        }
    }

我的"Model":

 public partial class tblTeacher
{
    [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2214:DoNotCallOverridableMethodsInConstructors")]
    public tblTeacher()
    {
        this.tblRatings = new HashSet<tblRating>();
        this.tblTeachersDisciplines = new HashSet<tblTeachersDiscipline>();
    }

    public int ID { get; set; }

    [Required]
    [Display(Name = "Име:")]
    [StringLength(50)]
    public string FirstName { get; set; }
}

听起来很奇怪,但您需要检查包含模型的 .cs 文件是否以 utf-8 编码正确保存。 IE。尝试在某些编辑器(如 notepad++)中打开此文件,并以 utf-8 格式保存。

我们经常使用 Cyrillic Display("Name"...),所以这应该不是核心问题。

AFAIK,Visual Studio 可以选择用不同的编码保存文件。打开包含模型 class、select File => Save As => Save with Encoding 的 CS 文件,然后在 Advanced Save Options 上选择 "UTF-8 with signature"(或您需要的其他编码)。

如果上述解决方案仍然无效,请打开您的 Layout.cshtml 文件,其中包含用于查看页面的基本 HTML 标记,然后同时使用 lang 属性和元标记:

<html lang="ru">

<meta charset="UTF-8">

这会将包含布局页面的整个视图页面声明为使用 UTF-8 编码的俄语,因此西里尔字符应该按照 Display 属性给出的正确呈现。

对于无法识别您的模型 class 名称的 Intellisense 问题,请转到工具 => 选项 => 文本编辑器 => C# => Intellisense,并检查是否应用了以下 2 个条件:

  1. "Show completion list after a character is typed" 已检查。

  2. "Commited by typing the following characters" 文本框包含 {}[]().,:;+-*/%&|^!~=<>?@#'"\.

欢迎提出其他建议。

解决方案是按照你们中的某些人的建议,将 tblTeachers(这是我的模型)编码为 UTF-8 并以这种方式保存。 之前我只是用记事本++打开Controller和HTML页面,都是UTF-8,但是我忘了检查模型