Атрибут отображения в 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 условия ниже:
"Показывать список завершения после ввода символа" отмечен.
Текстовое поле "Commited путем ввода следующих символов" содержит
{}[]().,:;+-*/%&|^!~=<>?@#'"\
,
Другие предложения приветствуются.
Решением было закодировать tblTeachers (это моя модель), как некоторые из вас предложили, в UTF-8 и сохранить его таким образом. До этого я только открывал страницы Controller и HTML с помощью notepad ++, и все они были в формате UTF-8, но я забыл проверить модель.
Может показаться довольно странной вещью, но вам нужно убедиться, что ваш файл.cs, содержащий модель, сохранен именно в кодировке utf-8. Т.е. попробуйте открыть этот файл в каком-нибудь редакторе, таком как notepad++, и сохранить точно в utf-8.
Мы часто используем кириллицу ("Имя"...), поэтому это не должно быть основной проблемой.