Я попробовал это, и это работает, но разве нет более чистого способа? Сегмент кода Razor Page находится ниже, а класс с ViewModel - ниже. Я не уверен, что еще предоставить.

@if (Model.Courses.Instructor != null)
{
    <div class="col-sm-10">
        @Html.DisplayFor(model => model.Courses.Instructor)
    </div>
}
else
{
    <div class="col-sm-10">
        --
    </div>
}



namespace OESAC.Models
{
    public class CoursesVM
    {
        public Int64 OESACID { get; set; }
        public String CourseTitle { get; set; }
        public String Instructor { get; set; }
        public String Locations { get; set; }

И на тот случай, если я, вероятно, не знаю, о чем я говорю, это класс, который допускает аннотации данных

using System;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;

namespace OESAC.Data
{
    //[Table("Courses")]
    public class Courses
    {
        [Key]
        public Int64 OESACID { get; set; }

            [MaxLength(120)]
            public String CourseTitle { get; set; }

            [MaxLength(50)]
            public String Instructor { get; set; }

            [MaxLength(50)]
            public String Locations { get; set; }
0
JustJohn 12 Апр 2019 в 03:24

2 ответа

Лучший ответ

Нет ничего плохого в вашем подходе. Это один из способов проверить нулевое значение на странице Razor. Другим вариантом является нулевое объединение оператор ??. Вы могли бы использовать это, если хотите предоставить значение по умолчанию в случае, если тип, допускающий значение NULL, не имеет значения:

<span>@(item.NullableValue ?? "Default value")</span>

И еще есть нулевой условный оператор ?, который вы, например, использовали бы для предотвращения вызова метода для объекта, допускающего обнуление, исключение в том случае, если элемент, вызываемый методом, имеет нулевое значение:

<span>@item.NullableValue?.ToString()</span>
1
Mike Brind 12 Апр 2019 в 20:42

Бу я! Нашел, что это работает также в контроллере на моем коде Razor Page. Я взял приведенный выше ответ Майка Бринда и добавил его в поле контроллера (обратите внимание на "?? и значение, если ноль). Легко peasy. Хорошо для проверки на ноль тоже. Но подождите! Есть еще! Прокрутите вниз до кода ниже:

   public async Task OnGetAsync(String CEUType, Boolean Approved)
        {

            Courses = await _context.Courses
                .Select(p => new CoursesVM
                {
                    OESACID = p.OESACID,
                    CourseTitle =p.CourseTitle ?? "",
                    Instructor = p.Instructor,
                    Locations = p.Locations,
                    Dates = p.Dates ?? "",
                    CEUDWP = p.CEUDWP,
                    CEUDEQ = p.CEUDEQ,
                    CEUonsiteInstall = p.CEUonsiteInstall,
                    CEUonsiteOandM = p.CEUonsiteOandM,
                    MaxCEU = p.MaxCEU ?? "",

Причина, по которой я получаю нулевые ошибки при загрузке страницы, заключается в том, что я пошел, но некоторые проверки DataAnnotation и ComponentModel в файле Courses.cs (Model). Эта маленькая строка обязательной проверки выдает нулевую ошибку во время выполнения:

  [Required(ErrorMessage = "A Course Title is required")]

И вот ошибка:

InvalidOperationException: The data is NULL at ordinal 1. This method can't be called on NULL values. Check using IsDBNull before calling.

Конечно, каждый ответ на Googling - это преобразование Null To String. Но где?

Ну, мой пример показывает, где: "CourseTitle = p.CourseTitle ??" "," Такая элегантная короткая рука, требующая небольшого количества текста. Таким образом, я могу вставить DataValidation и использовать вышеупомянутые сокращения. Забавно, что проверка нового / редактирования выдает ошибку только при отображении записи.

0
JustJohn 28 Апр 2019 в 06:09