问题描述
我有一个customPrincipal,用于在剃刀文件中设置用户名。我的问题是,当我打开运行项目时,它会尝试访问剃须刀页面中的该字段,并且由于我尚未登录,因此得到object reference is not set to an instance of an object
。登录后,由于设置了用户名令牌,该错误消失了。
现在,我要这样做,以便如果用户名字段为空(用户未登录)它将无法访问它
这是我的代码:
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> </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> </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;
}
}
});