尝试在视图ASP.NET MVC中显示来自ViewModel的数据时出现Null异常

时间:2020-11-02 18:12:13

标签: asp.net asp.net-mvc model-view-controller

我正在尝试使用ViewModel在视图中显示数据,但是这样做时会出现null异常,我不确定是什么问题。基本上,我有一个用户,该用户希望在其视图中的个人资料布局中显示其数据,以及希望在同一个人资料视图中全部来自不同表的数据。

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>

很抱歉问题中的代码量(尤其是viewmodel和controller部分),我只需要证明来自不同数据库表的对象很多。

现在回到我的问题,我在<li>First Name: @Model.DonatorName</li>的视图中得到一个null异常,并且我也假定其余的情况。我感觉我尝试使用我的视图模型的方式有问题,因为我习惯于使用列表来完成,然后在视图中遍历该列表,但是现在我不确定如何去做。实际上只显示数据库表中的一行,而不是所有行。无论如何,我们将不胜感激。

0 个答案:

没有答案
相关问题