Любая идея, как сделать более чистый способ для проверки на ноль в Razor Pages? - PullRequest
0 голосов
/ 12 апреля 2019

Я пробовал это, и это работает, но разве нет более чистого способа?Сегмент кода 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; }

Ответы [ 2 ]

1 голос
/ 12 апреля 2019

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

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

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

<span>@item.NullableValue?.ToString()</span>
0 голосов
/ 28 апреля 2019

Бу я!Нашел это работает тоже в контроллере на моем коде 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 (Модель). Эта небольшая строка обязательной проверки выдает нулевую ошибку ввремя выполнения:

  [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 и использовать вышеупомянутую стенографию. Забавно, как проверка new / edit вызывает ошибку при отображении только записи.

...