Атрибут отображения в MVC не отображает кириллицу в HTML

Я пытаюсь отобразить кириллическое слово "име" вместо имени столбца (FirstName) в таблице из базы данных, но вместо этого я получаю некоторые странные символы "Èìå". у меня есть <globalization fileEncoding="utf-8" /> в моем webconfig, а также я проверил файлы, содержащие код, и все они сохранены как 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);
        }
    }

Моя "Модель":

 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; }
}

3 ответа

Решение

AFAIK, Visual Studio имеет возможность сохранить файл с другой кодировкой. Откройте файл CS, который содержит класс модели, выберите File => Save As => Save with Encoding и выберите "UTF-8 с подписью" (или другую необходимую вам кодировку) в Advanced Save Options.

Если приведенные выше решения по-прежнему не работают, откройте файл Layout.cshtml, который содержит базовый тег HTML для страниц просмотра, а затем используйте атрибут lang и метатег:

<html lang="ru">

<meta charset="UTF-8">

Это объявит всю страницу просмотра, содержащую страницу макета, как русскую с кодировкой UTF-8, поэтому символы кириллицы должны отображаться правильно, как указано в Display приписывать.

Для проблемы Intellisense, которая не распознает имя класса вашей модели, перейдите в Инструменты => Параметры => Текстовый редактор => C# => Intellisense и проверьте, применяются ли 2 условия ниже:

  1. "Показывать список завершения после ввода символа" отмечен.

  2. Текстовое поле "Commited путем ввода следующих символов" содержит {}[]().,:;+-*/%&|^!~=<>?@#'"\,

Другие предложения приветствуются.

Решением было закодировать tblTeachers (это моя модель), как некоторые из вас предложили, в UTF-8 и сохранить его таким образом. До этого я только открывал страницы Controller и HTML с помощью notepad ++, и все они были в формате UTF-8, но я забыл проверить модель.

Может показаться довольно странной вещью, но вам нужно убедиться, что ваш файл.cs, содержащий модель, сохранен именно в кодировке utf-8. Т.е. попробуйте открыть этот файл в каком-нибудь редакторе, таком как notepad++, и сохранить точно в utf-8.

Мы часто используем кириллицу ("Имя"...), поэтому это не должно быть основной проблемой.

Другие вопросы по тегам