C# NullReferenceException:通过控制器访问ViewModel列表时,对象引用未设置为对象的实例
因此,我的视图模型没有正确地将CSV文件的信息提供给视图。我已经放置了一个断点,列表“Stocks”填充得很好,我甚至可以看到C# NullReferenceException:通过控制器访问ViewModel列表时,对象引用未设置为对象的实例,c#,asp.net-mvc,.net-core,viewmodel,C#,Asp.net Mvc,.net Core,Viewmodel,因此,我的视图模型没有正确地将CSV文件的信息提供给视图。我已经放置了一个断点,列表“Stocks”填充得很好,我甚至可以看到public IEnumerable Stocks{get;set;}中的所有值。但是,当我到达控制器时,var,ViewModel是空的?有什么建议吗? 这是视图模型 using System; using System.Collections.Generic; using System.Diagnostics; using System.Linq; using Sys
public IEnumerable Stocks{get;set;}
中的所有值。但是,当我到达控制器时,var,ViewModel是空的?有什么建议吗?
这是视图模型
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Mvc;
using StockApp.Models;
using System.Windows;
using System.IO;
using System.Text;
using CsvHelper;
using Microsoft.VisualBasic;
namespace StockApp.ViewModels.StockInfo
{
public class StockInfoViewModel
{
public StockInfoViewModel()
{
List<Stock> Stocks = new List<Stock>();
string file ="../StockApp/App_Data/companylist.csv";
using(var reader = new StreamReader(file))
{
while (!reader.EndOfStream)
{
var line = reader.ReadLine();
var values = line.Split(',');
Stocks.Add(new Stock { Name = values[1], Symbol = values[0] });
}
}
}
public IEnumerable<Stock> Stocks { get; set; }
}
}
模型
using System;
using System.Collections.Generic;
namespace StockApp.Models
{
public class StockNamesModel
{
public List<Stock> Stocks {get; set;}
}
public class Stock
{
public string Symbol{get; set;}
public string Name {get; set;}
}
}
使用系统;
使用System.Collections.Generic;
名称空间StockApp.Models
{
公共类股票模型
{
公开列表股票{get;set;}
}
公开股
{
公共字符串符号{get;set;}
公共字符串名称{get;set;}
}
}
最后但并非最不重要的是Razor代码
@model StockApp.ViewModels.StockInfo.StockInfoViewModel
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/css/bootstrap.min.css" integrity="sha384-Gn5384xqQ1aoWXA+058RXPxPg6fy4IWvTNh0E263XmFcJlSAwiGgFAW/dAiS6JXm" crossorigin="anonymous">
<h1>Our Advanced Algorithims To Buy and Sell These Stocks</h1>
<table class="table table-dark">
<thead>
<tr>
<th scope="col">Symbol</th>
<th scope="col">Name</th>
</tr>
</thead>
<tbody>
@foreach (var stock in Model.Stocks)
{
<tr>
<td>@stock.Symbol</td>
<td>@stock.Name</td>
</tr>
}
</tbody>
</table>
@model StockApp.ViewModels.StockInfo.StockInfoViewModel
我们先进的算法来买卖这些股票
象征
名称
@foreach(var库存模型.库存)
{
@股票代码
@股票名称
}
任何帮助都将不胜感激,谢谢 未分配
StockInfoViewModel
实例的Stocks
属性。在构造函数中设置intental变量Stocks
你需要更换线路
List<Stock> Stocks = new List<Stock>();
List Stocks=newlist();
与
this.Stocks=newlist();
您只需在视图模型中更改两件事
视图模型
- 删除
并直接分配,看起来像List
Stocks=newlist()代码>
到IEnumerable
成为List
public List Stocks{get;set;}
空值的原因:
List Stocks
范围在构造函数内,IEnumerable
未跟踪List Stocks
从你的控制器,你试图访问IEnumerable,它一开始没有分配任何东西
更新代码:
public class StockInfoViewModel
{
public StockInfoViewModel()
{
Stocks = new List<Stock>();
string file ="../StockApp/App_Data/companylist.csv";
using(var reader = new StreamReader(file))
{
while (!reader.EndOfStream)
{
var line = reader.ReadLine();
var values = line.Split(',');
Stocks.Add(new Stock { Name = values[1], Symbol = values[0] });
}
}
}
public List<Stock> Stocks { get; set; }
}
}
公共类StockInfoViewModel
{
公共股票信息视图模型()
{
股票=新名单();
字符串文件=“../StockApp/App_Data/companylist.csv”;
使用(var reader=newstreamreader(文件))
{
而(!reader.EndOfStream)
{
var line=reader.ReadLine();
var值=行分割(',');
Add(newstock{Name=values[1],Symbol=values[0]});
}
}
}
公开列表股票{get;set;}
}
}
谢谢,只需将IEnumerator切换到一个公共列表,它就能很好地工作。
this.Stocks = new List<Stock>();
public class StockInfoViewModel
{
public StockInfoViewModel()
{
Stocks = new List<Stock>();
string file ="../StockApp/App_Data/companylist.csv";
using(var reader = new StreamReader(file))
{
while (!reader.EndOfStream)
{
var line = reader.ReadLine();
var values = line.Split(',');
Stocks.Add(new Stock { Name = values[1], Symbol = values[0] });
}
}
}
public List<Stock> Stocks { get; set; }
}
}