Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# NullReferenceException:通过控制器访问ViewModel列表时,对象引用未设置为对象的实例_C#_Asp.net Mvc_.net Core_Viewmodel - Fatal编程技术网

C# NullReferenceException:通过控制器访问ViewModel列表时,对象引用未设置为对象的实例

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

因此,我的视图模型没有正确地将CSV文件的信息提供给视图。我已经放置了一个断点,列表“Stocks”填充得很好,我甚至可以看到
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; }

}
}