ASP.net MVC LINQ 空引用异常 [重复]
Posted
技术标签:
【中文标题】ASP.net MVC LINQ 空引用异常 [重复]【英文标题】:ASP.net MVC LINQ null reference exception [duplicate] 【发布时间】:2016-01-09 13:56:26 【问题描述】:当我尝试从表中查看实际登录用户的数据时出现空引用异常 - Klient_has_sklep 并且如果该用户未使用 Sklep 表签名。 当我查看使用 Sklep 表签名的用户的数据时,一切正常。
我认为问题出在带有 viewModel
的控制器中这是我的控制器
public ActionResult Index(int? id)
var viewModel = new Klient_has_SklepIndexData();
viewModel.Klients = db.Klients
.OrderBy(i => i.Nazwisko);
UserManager UM = new UserManager();
int idZalogowanego = UM.GetUserID(User.Identity.Name);
ViewBag.idzal = idZalogowanego;
viewModel.Klient_has_Skleps = viewModel.Klients.Where(i => i.SYSUserID == idZalogowanego).Single().Klient_has_Sklep;
return View(viewModel);
这是我的看法
@model Sklepy.Models.ViewModel.Klient_has_SklepIndexData
@
ViewBag.Title = "Index";
Layout = "~/Views/Shared/_Layout.cshtml";
<h2>@ViewBag.idzal.</h2>
<h2>Twoje zniżki w sklepach</h2>
<p>
@Html.ActionLink("Create New", "Create")
</p>
<table class="table">
<tr>
<th>asd</th>
</tr>
@if (Model != null)
@foreach (var item in Model.Klient_has_Skleps)
<tr>
<td>@item.Znizka1</td>
</tr>
</table>
这是我的模特
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Sklepy.Models.DB;
namespace Sklepy.Models.ViewModel
public class Klient_has_SklepIndexData
public IEnumerable<Klient> Klients get; set;
public IEnumerable<Klient_has_Sklep> Klient_has_Skleps get; set;
客户端类代码
public partial class Klient
[System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2214:DoNotCallOverridableMethodsInConstructors")]
public Klient()
this.Klient_has_Sklep = new HashSet<Klient_has_Sklep>();
public int KlientID get; set;
public int SYSUserID get; set;
public string Imię get; set;
public string Nazwisko get; set;
public string Adres get; set;
public string Telefon get; set;
public string Email get; set;
public virtual SYSUser SYSUser get; set;
[System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2227:CollectionPropertiesShouldBeReadOnly")]
public virtual ICollection<Klient_has_Sklep> Klient_has_Sklep get; set;
【问题讨论】:
您究竟在哪里得到空异常?在行动中还是在视野中? 在控制器中这一行 viewModel.Klient_has_Skleps = viewModel.Klients.Where(i => i.SYSUserID == idZalogowanego).Single().Klient_has_Sklep; 【参考方案1】:如下所示创建您的 ViewModel。我进行了修改以使用List
进行默认初始化。
public class Klient_has_SklepIndexData
public IList<Klient> Klients get; set;
public IList<Klient_has_Sklep> Klient_has_Skleps get; set;
public Klient_has_SklepIndexData()
Klients = new List<Klient>();
Klient_has_Skleps = new List<Klient_has_Sklep>();
还有你的操作代码。
public ActionResult Index(int? id)
var viewModel = new Klient_has_SklepIndexData();
viewModel.Klients = db.Klients
.OrderBy(i => i.Nazwisko).ToList();
UserManager UM = new UserManager();
int idZalogowanego = UM.GetUserID(User.Identity.Name);
ViewBag.idzal = idZalogowanego;
var skelp = viewModel.Klients.FirstOrDefault(i => i.SYSUserID == idZalogowanego);
if(skelp != null)
if(skelp.Klient_has_Sklep != null)
viewModel.Klient_has_Skleps = skelp.Klient_has_Sklep.ToList();
return View(viewModel);
【讨论】:
我使用了复制粘贴的方法。还是报错Cannot convert from 'System.Collections.Generic.ICollection<Sklepy.Models.DB.Klient_has_Sklep>' to 'Sklepy.Models.DB.Klient_has_Sklep'
我先有数据库,所以看起来像这样:link
这一行返回错误:Only assignment, call, increment, decrement, and new object expressions can be used as a statement
编辑了我的帖子,添加了 Klient 类代码。
还是不行在同一行:Cannot implicitly convert type 'System.Collections.Generic.ICollection<Sklepy.Models.DB.Klient_has_Sklep>' to 'System.Collections.Generic.IList<Sklepy.Models.DB.Klient_has_Sklep>'. An explicit conversion exists (are you missing a cast?)
System.InvalidOperationException
在同一行。以上是关于ASP.net MVC LINQ 空引用异常 [重复]的主要内容,如果未能解决你的问题,请参考以下文章
UrlHelper 类在 Asp.net mvc 中引发空异常
ASP.NET Core MVC 在引用数据库连接时生成异常错误
ASP.NET MVC 4 ScriptBundle 返回空