如何检查customPrincipal是否为null?

问题描述

我有一个customPrincipal,用于在剃刀文件中设置用户名。我的问题是,当我打开运行项目时,它会尝试访问剃须刀页面中的该字段,并且由于我尚未登录,因此得到object reference is not set to an instance of an object登录后,由于设置了用户名令牌,该错误消失了。

enter image description here

现在,我要这样做,以便如果用户名字段为空(用户登录)它将无法访问它

这是我的代码

CustomPrincipal.cs

 public class CustomPrincipal : ICustomPrincipal
    {
        public CustomPrincipal(string username)
        {
            Identity = new GenericIdentity(username);
        }

        public string currentUsername { get; set; }
    }

ICustomPrincipal.cs

public class ICustomPrincipal : IPrincipal
    {
        public string currentUsername { get; set; }
        public IIdentity Identity { get; set; }
        public bool IsInRole(string role) { return false; }
    }

NavigationBar.cshtml

<a class="nav-link" href="#" id="navbarDropdownMenuLink" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
  <span class="d-inline-block float-left user-icon pt-0"><i class="fas fa-user fa-1x" aria-hidden="true"></i>&nbsp;&nbsp;&nbsp;</span>
  <span class="d-inline-block"><p class="mb-0">@((User as AE.Web.Gwic.Models.CustomPrincipal).currentUsername)</p></span>
</a>

我尝试使用以下内容,但它也给出了相同的错误 有人可以给我一些启发吗?

<a class="nav-link" href="#" id="navbarDropdownMenuLink" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
 <span class="d-inline-block float-left user-icon pt-0"><i class="fas fa-user fa-1x" aria-hidden="true"></i>&nbsp;&nbsp;&nbsp;</span>
 @if (String.IsNullOrWhiteSpace((User as AE.Web.Gwic.Models.CustomPrincipal).currentUsername))
   {
    <span class="d-inline-block"><p class="mb-0">@((User as AE.Web.Gwic.Models.CustomPrincipal).currentUsername)</p></span>
   }

</a>

解决方法

发生了什么事,您正在尝试访问null对象上的currentUsername(这就是引发异常的原因)。解决方案是检查实际的is对象是否为null而不是currentUsername:

   

var array_html = "";
    var data_array = boroughs[property];
    for (var i in data_array) {
      array_html +=
        "<b>" + "<u>"+
        data_array[i]["business"] +
        "</b></u><br />" + "<i>" +
        data_array[i]['adderess'] +
        "</i>"+
        data_array[i]['owner']   +
        "<br />"+
         '<a href="http://'+
        data_array[i]['website'] + '" target=_blank" title="Opens in a new window">' + 
        data_array[i]['website']+ '</a>'+
             data_array[i]['neighbourhood'] +
              "<br />"+
               '<a href="'+
              data_array[i]['maps']+ '" target=_blank" title="Opens in a new window">' + 
              '<p> Open Maps </p>' +'</a>'+ "<p class='products'>"+ //products is defined
data_array[i]["products"]+ '</p>' +
        "<br />"+   "<br />";
    }

    var collapse_html =
      '<div class="collapse show" id="' +
      property.split(" ").join("_") +
      '">' +
      '<div class="card card-body">' +
      array_html +
      "</div>" +
      "</div>";
    final_html += boroughs_html + collapse_html;
  }
  return final_html;
}
//search functionality


    const search_btn_input = document.getElementsByClassName(
      "search_btn_input "
    )[0];
    const categories = document.getElementsByClassName("category_name");
    const products = document.getElementsByClassName("products");

    search_btn_input.addEventListener("input",(e) => {
      var search_key = search_btn_input.value.toUpperCase(); 


      for (var i in categories) {
        var category_name = categories[i].innerHTML;
        var products_name = products[i].innerHTML;
        if (category_name != undefined) {
          category_name = category_name.toUpperCase();
        } else {
          return;
        }



    //search button recognizing the word
        if (category_name.includes(search_key)) {
          categories[
            i
          ].parentElement.parentElement.parentElement.parentElement.style.order = -1;
        } else {
          categories[
            i
          ].parentElement.parentElement.parentElement.parentElement.style.order = 0;
        }
      }
    });