我试图在我的视图中传递多个模型,我得到以下错误对象引用未设置为对象的实例

时间:2016-03-18 07:35:20

标签: asp.net-mvc asp.net-mvc-4 razor

您好,我正在尝试将多个模型传递到我的MVC视图中。我创建了一个View Model Class,我从GetDeviceSpecificationData()方法中获取数据,然后将其传递给Action Result GetDeviceSpecification()中的View我在下面的语句中收到错误。

@foreach (var spec in Model.myDeviceSpecifications)

错误是对象引用未设置为对象的实例。 App_Web_eervchlw.dll中出现“System.NullReferenceException”类型的异常,但未在用户代码中处理

我的ViewModelClass

public class InventoryViewModel
{
    public List<DeviceSpecifications> myDeviceSpecifications { get; set;}
}

我的方法是从我的数据库获取设备规格数据

public List<DeviceSpecifications> GetDeviceSpecificationData()
    {
        var myDeviceSpecifications = db.DeviceSpecifications.Include(d => d.Specification).Include(d => d.Value).Include(d => d.DSID).Include(d => d.SpecID).Include(d => d.DeviceID);
        return myDeviceSpecifications.ToList();
    }

我的行动结果

public ActionResult GetDeviceSpecification()
{
    InventoryViewModel mymodel = new InventoryViewModel();
    mymodel.myDeviceSpecifications = GetDeviceSpecificationData();
    return View(mymodel);
}

和我的观点

div class="form-group">
        @Html.LabelFor(model => model.myDeviceSpecifications, "Specification", htmlAttributes: new { @class = "control-label col-md-2" })
        <div class="col-md-10">
            <select id="devspec">
                @foreach (var spec in Model.myDeviceSpecifications)
                {
                    <option value="@spec.SpecID">@spec.Specification</option>
                }

            </select>
        </div>
    </div>

1 个答案:

答案 0 :(得分:0)

在InventoryViewModel类中,您声明了一个列表但没有初始化它 解决方案是创建一个构造函数并初始化列表

public class InventoryViewModel
{
   public List<DeviceSpecifications> myDeviceSpecifications { get; set;}
   public InventoryViewModel()
   {
      myDeviceSpecifications = new List< DeviceSepecifications >();
   }
}

每当有列表时,请始终遵循此方法。