我有一个视图,它使用Grid.MVC来显示所需的用户属性。我的控制器在下面使用用户[MemberOrgID]或[SponsorOrgID]查找与该用户特定ID相关的所有相关组织/赞助商信息(用户将拥有其他用户的ID,从未同时拥有两个ID):在MVC5视图中处理/防止NullReferenceException?
// GET: Admin/UserManagement
public async Task<ActionResult> Index()
{
ViewBag.headerTitle = "User Management";
ViewBag.showCreateButton = true;
ViewBag.createUrl = "/Admin/UserManagement/Create";
ViewBag.createText = " Create a New User";
List<ApplicationUser> model = UserManager.Users.ToList();
foreach (ApplicationUser user in model)
{
if (user.MemberOrgId != null)
{
user.Organization = db.MemberOrganizations.Find(user.Organization);
}
//else
//{
// user.Organization.Name = " ";
//}
if (user.SponsorOrgId != null)
{
user.Sponsor = db.SponsorOrganizations.Where(o => o.Id == user.SponsorOrgId).FirstOrDefault();
}
//else
//{
// user.Sponsor.Name = " ";
//}
}
return View(model);
}
由于我的第一个用户有一个赞助商的ID,这是我能即时窗口中看到在调试中VS2013:
?user.Sponsor
{System.Data.Entity.DynamicProxies.SponsorOrganizations_F2A27693F33AFF36C814F6FFA2CE63AD656938244F599B7D1AB2ED80CC26EF9A}
[System.Data.Entity.DynamicProxies.SponsorOrganizations_F2A27693F33AFF36C814F6FFA2CE63AD656938244F599B7D1AB2ED80CC26EF9A]: {System.Data.Entity.DynamicProxies.SponsorOrganizations_F2A27693F33AFF36C814F6FFA2CE63AD656938244F599B7D1AB2ED80CC26EF9A}
City: null
Country: null
Enabled: true
FacebookUrl: "https://www.facebook.com/sponsor1"
Id: 1
LogoSrc: "Sponsor1.jpg"
Name: "Sponsor1"
OwnerId: "1d720c20-a508-4880-a5e6-80af5f2f8caf"
OwnerName: "Sponsor Primary"
ProfilePictureUrl: "sponsorprofilepicture/Sponsor1.jpg"
SponsorServiceCategory: Count = 11
State: null
TwitterUrl: "https://twitter.com/sponsor1"
Users: Count = 0
WebsiteUrl: "http://www.sponsor1.com"
我有一个NullReference问题但是当视图被加载(如下图)代码o.Organization.Name
被标记为NullReferenceException
(我添加了一个try catch只是为了让事情变得更友好一点,让其余的查看负载):
@using GridMvc.Html
@model IEnumerable<PROJECTS.Models.ApplicationUser>
@{
ViewBag.Title = "View Users";
Layout = "~/Areas/Admin/Views/Shared/_LayoutAdmin.cshtml";
}
<div class="overflowPrevention">
<!-- Grid.MVC Code -->
<div>
@*Images in Columns: https://gridmvc.codeplex.com/discussions/440977*@
@try
{
@Html.Grid(Model).Columns(columns =>
{
columns.Add().Encoded(false).Sanitized(false).RenderValueAs(o => Html.ActionLink("Edit", "Edit", "UserManagement", new { id = o.Id }, null)).SetWidth(15);
columns.Add().Encoded(false).Sanitized(false).RenderValueAs(o => o.Name).Titled("Name").Sortable(true).Filterable(true).SetWidth(100);
columns.Add().Encoded(false).Sanitized(false).RenderValueAs(o => o.Position).Titled("Position").Sortable(true).Filterable(true).SetWidth(50);
columns.Add().Encoded(false).Sanitized(false).RenderValueAs(o => o.Email).Titled("Email").Sortable(true).Filterable(true).SetWidth(100);
columns.Add().Encoded(false).Sanitized(false).RenderValueAs(o => o.EmailConfirmed.ToString()).Titled("Confirmed").Sortable(true).Filterable(true).SetWidth(100);
columns.Add().Encoded(false).Sanitized(false).RenderValueAs(o => o.MemberOrgId.ToString()).Titled("MemOrg.").Sortable(true).Filterable(true).SetWidth(25);
columns.Add().Encoded(false).Sanitized(false).RenderValueAs(o => o.Organization.Name.ToString()).Titled("MemOrg.").Sortable(true).Filterable(true).SetWidth(25);
columns.Add().Encoded(false).Sanitized(false).RenderValueAs(o => o.SponsorOrgId.ToString()).Titled("Sponsor").Sortable(true).Filterable(true).SetWidth(25);
columns.Add().Encoded(false).Sanitized(false).RenderValueAs(o => o.Sponsor.Name.ToString()).Titled("Sponsor").Sortable(true).Filterable(true).SetWidth(25);
}).WithPaging(5)
}
catch (NullReferenceException ex)
{
return;
}
</div>
</div>
有没有人对我怎么可能会否定这个NullReferenceException
问题的想法?用户将始终具有MemberOrganizationID或SponsorID,这意味着o.Organization.Name
将具有值或o.Sponsor.Name
意志,但从来都不是。我试图找到一种方法,使其为null或者不显示,或者在列中显示为空值。
任何帮助非常感谢!我试图通过我的控制器上的一些IF
检查来否定这个问题,以及View上的一些代码,但还没有找到解决方案。
编辑:
克里斯的解决方案的工作!以下是我更新的代码段:
foreach (ApplicationUser user in model)
{
if (user.MemberOrgId != null)
{
user.Organization = db.MemberOrganizations.Where(o => o.Id == user.MemberOrgId).FirstOrDefault();
}
if (user.SponsorOrgId != null)
{
user.Sponsor = db.SponsorOrganizations.Where(o => o.Id == user.SponsorOrgId).FirstOrDefault();
}
}
return View(model);
columns.Add().Encoded(false).Sanitized(false).RenderValueAs(o => o.MemberOrgId.ToString()).Titled("MemOrgID").Sortable(true).Filterable(true).SetWidth(25);
columns.Add().Encoded(false).Sanitized(false).RenderValueAs(o => o.Organization == null ? "" : o.Organization.Name.ToString()).Titled("MemOrg Name.").Sortable(true).Filterable(true).SetWidth(25);
columns.Add().Encoded(false).Sanitized(false).RenderValueAs(o => o.SponsorOrgId.ToString()).Titled("SponsorID").Sortable(true).Filterable(true).SetWidth(25);
columns.Add().Encoded(false).Sanitized(false).RenderValueAs(o => o.Sponsor == null ? "" : o.Sponsor.Name.ToString()).Titled("Sponsor Name").Sortable(true).Filterable(true).SetWidth(25);
我在丹尼尔之前看过那篇文章。我认为这可能会略有不同,因为我知道为什么以及如何得到'Null'异常,但我试图找到解决方法。克里斯已经找到答案:) –