首页 > 解决方案 > 尝试在视图 ASP.NET MVC 中显示视图模型中的数据时出现空异常

问题描述

我正在尝试使用 ViewModel 在我的视图中显示数据,但是这样做时我得到了空异常,我不确定问题是什么。基本上我有一个用户,我希望在我的视图的配置文件布局中显示他的数据,以及来自不同表的数据都在同一个配置文件视图中。

视图模型代码:

public int DonatorID { get; set; }
public string DonatorName { get; set; }
public string DonatorSurname { get; set; }
public string DonatorEmail { get; set; }
public int ContactNo { get; set; }
public int UserID { get; set; }

public string DonatorRank { get; set; }
public string RankIcon { get; set; }
public int XpAmount { get; set; }
public int TokenBalance { get; set; }

public int PaymentID { get; set; }
public string CardNo { get; set; }
public int ExpirationMonth { get; set; }
public int ExpirationYear { get; set; }
public int CVV { get; set; }
public int Zip { get; set; }
public string CardType { get; set; }
public int PaymentDonatorID { get; set; }

public int NpoID { get; set; }
public string NpoName { get; set; }
public double Longitude { get; set; }
public double Latitude { get; set; }

控制器代码:

id = 1;
//Disable lazy loading
db.Configuration.ProxyCreationEnabled = false;

//Add data to the dynamic object
var DynamicProfileDetail = db.tblDonator.Where(zz => zz.user_id == id).Include(yy => yy.tblUser).Include(xx => xx.tblDonator_Rank).FirstOrDefault();

DonatorUserViewModel ProfileDetails = new DonatorUserViewModel();
//Set profile details values
ProfileDetails.DonatorName = DynamicProfileDetail.donator_name;
ProfileDetails.DonatorSurname = DynamicProfileDetail.donator_surname;
ProfileDetails.DonatorEmail = DynamicProfileDetail.tblUser.email;
ProfileDetails.ContactNo = Convert.ToInt32(DynamicProfileDetail.donator_contact_no);

//Set other information
ProfileDetails.XpAmount = DynamicProfileDetail.xp_amount;
ProfileDetails.DonatorRank = DynamicProfileDetail.tblDonator_Rank.description;
ProfileDetails.RankIcon = DynamicProfileDetail.tblDonator_Rank.rank_icon;
ProfileDetails.TokenBalance = DynamicProfileDetail.donator_token_balance;

//Payment details section
int DonatorID = DynamicProfileDetail.donator_id;
var DynamicPaymentDetails = db.tblDonator_Payment_Details.Where(gg => gg.donator_id == DonatorID).Include(ff => ff.tblCard_Type).FirstOrDefault();

DonatorUserViewModel PaymentDetails = new DonatorUserViewModel();

//Set payment detail values
PaymentDetails.CardNo = DynamicPaymentDetails.donator_card_no;
PaymentDetails.ExpirationMonth = DynamicPaymentDetails.expiration_month;
PaymentDetails.ExpirationYear = DynamicPaymentDetails.expiration_year;
PaymentDetails.CVV = DynamicPaymentDetails.cvv;
PaymentDetails.Zip = DynamicPaymentDetails.zip_code;
PaymentDetails.CardType = DynamicPaymentDetails.tblCard_Type.description;

//Map marker section
var DynamicMapMarkers = db.tblNpo;

DonatorUserViewModel MapMarkers = new DonatorUserViewModel();

//Set map marker values
foreach (var item in DynamicMapMarkers)
{
   MapMarkers.NpoID = item.npo_id;
   MapMarkers.NpoName = item.npo_name;
   MapMarkers.Longitude = Convert.ToDouble(item.longitude);
   MapMarkers.Latitude = Convert.ToDouble(item.latitude);

   MapMarkerList.Add(MapMarkers);
}

//ViewBags to display the relevant info
ViewBag.MapMarkerList = MapMarkerList;

return View();

我在上面代码中的逻辑是,我将数据库中的值设置为 ViewModel 中的对象,然后能够在我的视图中显示它。

查看代码:

@model MyProject.ViewModels.DonatorUserViewModel

<h2>View/Edit your Details:</h2>
<ul>
   <li>First Name: @Model.DonatorName</li>
   <li>Surname: @Model.DonatorSurname</li>
   <li>Contact Number: @Model.ContactNo</li>
   <li>Email Address: @Model.DonatorEmail</li>
</ul>

很抱歉问题中的代码量(特别是视图模型和控制器部分)我只需要表明来自不同数据库表的许多不同对象。

现在回到我的问题,在我看来,我得到了一个空异常,我<li>First Name: @Model.DonatorName</li>也假设其余的异常。我觉得我尝试使用我的视图模型的方式有问题,因为我习惯于使用列表然后在视图中循环遍历该列表,但是我现在不知道该怎么做我只显示数据库表中的一行,而不是所有行。无论如何,任何帮助将不胜感激。

标签: asp.netasp.net-mvcmodel-view-controller

解决方案


推荐阅读