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

편집 : 목록 또는 선택 목록에 대한 IEnumerable을 사용할 수 있습니다 내 인터페이스에

public interface ICommodityRepository 
{ 

    IEnumerable<CommodityViewModel> GetCommodities(); 

} 

내 질문은 : 여기에 새 인터페이스 내 인터페이스입니다?

편집 새 저장소 :

public class CommoditiesController : Controller 
{ 
    private readonly ICommodityRepository _commoditiyRepository; 

    public CommoditiesController(ICommodityRepository commodityRepository) 
    { 

     _commoditiyRepository = commodityRepository; 
    } 
    public IActionResult CommoditiesList() 
    { 

     return View(_commoditiyRepository.GetCommodities()); 

    } 


} 

그리고 나는 모든 페이지에서 액세스 할 원하기 때문에 드롭 다운을 표시 할 레이아웃을 사용하고 나의보기 :

public class CommodityRepository : ICommodityRepository 
{  
    private readonly CommodityViewModel _context; 


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

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



} 

가 여기 내 컨트롤러입니다. (나는 부분보기에 넣어해야합니다 알고 난 그냥 먼저 작업을 진행하고자합니다..) :

는 NullReferenceException :

  <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>
여기

내가 과거를 얻을 수없는 오류입니다 : 개체 참조가 개체의 인스턴스로 설정되지 않았습니다. 내가 잘못거야 곳 (134)

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

난 정말 모르는 _Layout.cshtml에서 MoveNext는, 라인. 저장소 메서드에서 새 목록을 인스턴스화했습니다. 심지어 ViewModel에서 새 List를 인스턴스화했습니다. 어떤 점이 올바른 방향으로 나를 가리킬 수 있습니까? 감사.

+0

은 레이아웃이 모델을 가지고 있습니까? 코드에서 'Model.Commodities'를 사용하고있는 것 같습니다. – Shyju

답변

0

SelectListItem은 UI 관심사이므로 저장소에서 반환하지 않아야 IEnumerable 또는 List가 반환되고 IEnumerable 또는 SelectListItem 목록으로 컨트롤러에서 변환해야합니다.

저는 프로젝트에서 TimeZones 목록과 비슷한 작업을하고 있습니다. ViewModel에는 SelectListItem의 IEnumerable에 대한 속성이 있습니다. 내 데이터는 읽기 전용 컬렉션에서 가져옵니다.

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}을 인스턴스화 할 때 오류가 발생합니다. 오류 : 연산자 ==를 string 또는 myViewModel 유형의 피연산자에 적용 할 수 없습니다. –

+0

위 코드를 업데이트했습니다. –