-1

В моем приложении используется Asp.Net Core. EF Core. Я использую ViewModel, а не модель EF и шаблон репозитория. Моя модель просмотра я создал себя. Он не подключен к EF или что-то еще. Может быть, именно здесь я ошибаюсь?Список или выбор списка продолжает возвращать ошибку ссылки на объект

Edit New ViewModel:

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; } 
} 

EDIT: Новый интерфейс Вот мой интерфейс:

public interface ICommodityRepository 
{ 

    IEnumerable<CommodityViewModel> GetCommodities(); 

} 

Мой вопрос на моем интерфейсе можно использовать IEnumerable для списка или выберите список?

Edit New Repository:

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. Может ли кто-нибудь указать мне в правильном направлении? Благодарю.

+0

ли ваш макет имеет модель? Похоже, код использует 'Model.Commodities' – Shyju

ответ

0

SelectListItem - это проблема с пользовательским интерфейсом, поэтому ваш репозиторий не должен возвращать его, он должен возвращать IEnumerable или List и преобразовывать его в IEnumerable или List of SelectListItem в контроллер.

Я делаю что-то подобное в своем проекте со списком TimeZones. ViewModel имеет свойство IEnumerable из SelectListItem, мои данные поступают из коллекции только для чтения. мой код выглядит так:

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

и мой взгляд бритвы, как это:

<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}: Ошибка: Operator == не может применяться к операндам строки типа или myViewModel. –

+0

Я обновил свой код выше. –