-1

我的应用程序正在使用Asp.Net核心。 EF核心。我正在使用ViewModel,而不是EF模型和存储库模式。我的视图模型我创建了自己。它没有连接到EF或任何东西。也许这就是我要出错的地方?列表或选择列表不断返回对象引用错误

编辑新视图模型:

public partial class CommodityViewModel 
{ 
    public CommodityViewModel() 
    { 

    } 
    public IEnumerable<SelectListItem> CommoditiesItems { get; set; } 


    public Guid Oid { get; set; } 
    public string Code { get; set; } 
    public string Description { get; set; } 
} 

编辑:新界面 这里是我的接口:

public interface ICommodityRepository 
{ 

    IEnumerable<CommodityViewModel> GetCommodities(); 

} 

:我对接口上的问题是,我可以使用的IEnumerable列表或选择列表?

编辑新的仓库:

public class CommodityRepository : ICommodityRepository 
{  
    private readonly CommodityViewModel _context; 


    public CommodityRepository(CommodityViewModel context) 
    { 
     _context = context; 
    } 

    public IEnumerable<CommodityViewModel> GetCommodities() 
    { 
     return _context.CommoditiesList.ToList(); 
    } 



} 

这里是我的控制器:

public class CommoditiesController : Controller 
{ 
    private readonly ICommodityRepository _commoditiyRepository; 

    public CommoditiesController(ICommodityRepository commodityRepository) 
    { 

     _commoditiyRepository = commodityRepository; 
    } 
    public IActionResult CommoditiesList() 
    { 

     return View(_commoditiyRepository.GetCommodities()); 

    } 


} 

而我查看我使用的布局向下显示下降,因为我希望从每一个页面访问。 (我知道我应该把它放在一个局部视图我只是想获得它第一个工作日。):

  <li class="dropdown"> 
 
       <a href="#" class="dropdown-toggle" data-toggle="dropdown"><i class="fa fa-bell"></i> <b class="caret"></b></a> 
 
       <ul class="dropdown-menu alert-dropdown"> 
 
        <li> 
 
         <select asp-for="Code" asp-items="@(new SelectList(Model.CommoditiesList,"Code","Description"))"> 
 
          <option>Please select one</option> 
 
         </select> 
 
        </li> 
 
       </ul> 
 
      </li>

这是我不能让过去的错误:

的NullReferenceException : 你调用的对象是空的。 MoveNext将在_Layout.cshtml,线134

<!-- Here: Line 134--><select asp-for="Code" asp-items="@(new SelectList(Model.CommoditiesList,"Code","Description"))"> 
 
          <option>Please select one</option> 
 
         </select>

我真的不知道我要去哪里错了。我已经在存储库方法中实例化了一个新列表。我甚至在ViewModel中实例化了一个新的List。有些人可以指引我朝着正确的方向吗?谢谢。

+0

请问您的布局有一个模型?看起来像代码使用'Model.Commodities' – Shyju

回答

0

SelectListItem是一个UI问题,因此您的存储库不应该返回它,它应该返回IEnumerable或List,并将其转换为控制器中的IEnumerable或ListList List。

我正在做一些类似的项目与时区的列表。 ViewModel具有IEnumerable的SelectListItem属性,我的数据来自只读集合。我的代码是这样的:

model.TimeZoneId = selectedSite.TimeZoneId; 
model.AllTimeZones = tzHelper.GetTimeZoneList().Select(x => 
        new SelectListItem 
        { 
         Text = x, 
         Value = x, 
         Selected = model.TimeZoneId == x 
        }); 

和我的Razor视图是这样的:

<div class="form-group"> 
     <label asp-for="TimeZoneId" class="col-md-2 control-label">@sr["Time Zone"]</label> 
     <div class="col-md-10"> 
      <select asp-for="TimeZoneId" 
        asp-items="Model.AllTimeZones" class="form-control"></select> 
      <span asp-validation-for="TimeZoneId" class="text-danger"></span> 
     </div> 
    </div> 
+0

当我实例化新的SelectListItem {Selected = model.code}时出现错误:错误:运算符==不能应用于字符串或myViewModel类型的操作数。 –

+0

我已经更新了上面的代码。 –