有任何想法如何在“剃刀页面”显示中做更干净的空检查?

时间:2019-04-12 00:24:35

标签: razor-pages

我已经尝试过了,而且行得通,但是没有更干净的方法吗? Razor页面代码段位于下面,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 个答案:

答案 0 :(得分:1)

您的方法没有错。这是在Razor页面中检查null的一种方法。另一种选择是null coalescing operator ??。如果可以为null的类型没有值,可以使用它来提供默认值:

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

然后是null-conditional operator ?,例如,您可以使用它来防止可为空的对象调用的方法引发异常,如果调用该方法的项为null :

<span>@item.NullableValue?.ToString()</span>

答案 1 :(得分:0)

嘘!发现这在我的Razor Page代码后面的控制器中也有效。我采用了Mike Brind的上述答案,并将其添加到控制器中的字段中(注意“ ??和值,如果为null)。简单易用。也适用于null检查。但是,等等!还有更多!向下滚动到代码下方:

   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 ?? "",

我在页面加载时出现空错误的原因是我去了,但是在Courses.cs文件(模型)中进行了一些DataAnnotation和ComponentModel验证。这行要求的验证仅在运行时引发空错误:

  [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,并使用上述速记。 有趣的是,新的/编辑验证如何在记录显示时引发错误。