2017-04-01 11 views
0

私の最初のasp.netコアプロジェクトで作業しているので、私の最初のビューコンポーネントもあります。私はチュートリアルのすべてのステップに従っていると思っていましたが、私はビューのコンポーネントを正常に呼び出すことはできません。ここでViewコンポーネントを呼び出す際の問題

は私のコードです:

/ViewComponents/ItemListViewComponent.cs

using Microsoft.AspNetCore.Mvc; 

namespace LC.CompuTECH._2017.ViewComponents 
{ 
    public class ItemListViewComponent : ViewComponent 
    { 
     public ItemListViewComponent(string t) 
     { 
      switch (t.ToUpper()) 
      { 
       case "STUDENT": 
        this.Type = ListTypes.Student; 
        break; 

       case "WORK": 
        this.Type = ListTypes.Work; 
        break; 

       case "GAMER": 
        this.Type = ListTypes.Gamer; 
        break; 

       case "OTHER": 
        this.Type = ListTypes.Other; 
        break; 
      } 
     } 

     public IViewComponentResult Invoke() 
     { 
      return View(); 
     } 

     public ListTypes Type { get; internal set; } 

     public enum ListTypes 
     { 
      Student, 
      Work, 
      Gamer, 
      Other 
     } 
    } 
} 

/Views/Shared/Components/ItemList/Default.cshtml

MY VIEW COMPONENT 

とIこのような呼び出しを試みてください:

@await Component.InvokeAsync("ItemList", new { t = "student" }) 

が、私だけを取得:

と、InvalidOperationException:型 '可能System.String' のサービスを解決することができません 'をLC.CompuTECH._2017.ViewComponents.ItemListViewComponent' をアクティブにしようとしたとき。

これはとても基本的なので、私は何が間違っているのか理解できません。

すべてのヘルプは非常に高く評価されます

答えて

1

だけ注入することができること、あなたのコンポーネントのつまり依存関係を取る必要があり、あなたのコンストラクタ。あなたに渡したいものは何でも

invokeメソッドに入る、ないコンストラクタ

using Microsoft.AspNetCore.Mvc; 

namespace LC.CompuTECH._2017.ViewComponents 
{ 
    public class ItemListViewComponent : ViewComponent 
    { 
     public ItemListViewComponent() 
     { 

     } 

     public IViewComponentResult Invoke(string t) 
     { 
      switch (t.ToUpper()) 
      { 
       case "STUDENT": 
        this.Type = ListTypes.Student; 
        break; 

       case "WORK": 
        this.Type = ListTypes.Work; 
        break; 

       case "GAMER": 
        this.Type = ListTypes.Gamer; 
        break; 

       case "OTHER": 
        this.Type = ListTypes.Other; 
        break; 
      } 

      return View(); 
     } 

     public ListTypes Type { get; internal set; } 

     public enum ListTypes 
     { 
      Student, 
      Work, 
      Gamer, 
      Other 
     } 
    } 
} 

ノートも、あなたはあなたがInvokeAsync起動していない使用待つために何かを持っていない限り、あなたはInvokeAsyncを使用する場合は、あなたのメソッドのシグネチャがすべきあなたがサービスの呼び出し

+0

ああ、つまり何かを待つ

Task<IViewComponentResult> InvokeAsync(string t) 

とそのメソッド内なります!非常に賢明な男ありがとうございます:) – SteinTheRuler

関連する問題