-1

私のアプリに戻って保持します。 EFコア。私はViewModel、EFモデルではなく、リポジトリパターンを使用しています。私のビューモデル私は自分自身を作成し​​ました。それはEFなどに配線されていません。多分私は間違っているのでしょうか?リストまたは選択リストはAsp.Netコアを使用しているオブジェクト参照エラー

編集新しいの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を使用することができますか?

編集新しいリポジトリ:

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>
ここ

は、私は過去を得ることができないエラーがあります: オブジェクト参照がオブジェクト インスタンスに設定されていません。 _Layout.cshtmlで MoveNextメソッド、ライン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

は、あなたのレイアウトのモデルを持っていますか?エラー:コードのように見えるが、私は新しいSelectListItem {[選択= model.code}をインスタンス化するとき、私はエラーを取得しています 'Model.Commodities' – Shyju

答えて

0

SelectListItemは、リポジトリがそれを返すべきではありませんので、それはIEnumerableをまたはリストを返す必要がありますし、あなたがコントローラでのIEnumerableまたはSelectListItemのリストにその変換UIの問題です。

私は、タイムゾーンのリストを自分のプロジェクトで似た何かをやっています。 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

を使用しているオペレータ==は、文字列型またはmyViewModelのオペランドに適用することはできません。 –

+0

上記のコードを更新しました。 –

関連する問題