2017-04-01 10 views
0

Ich arbeite an meinem ersten asp.net-Kernprojekt und damit auch an meiner ersten View-Komponente. Ich dachte, ich hätte jeden Schritt in den Tutorials verfolgt, aber ich konnte meinen View-Component nicht erfolgreich aufrufen.Probleme beim Aufruf der Komponente

Hier ist mein Code:

/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 

und ich versuche so zu rufen:

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

aber ich nur bekommen:

InvalidOperationException: Kann Dienst für Typ 'System.String' lösen, während versucht 'LC.CompuTECH._2017.ViewComponents.ItemListViewComponent' zu aktivieren.

Dies sollte so einfach sein, so kann ich nicht herausfinden, was ich falsch mache.

Jede Hilfe wird sehr hoch

Antwort

1

Konstruktor sollte nur Dinge zu erkennen, dass, dh Abhängigkeiten Ihrer Komponente injiziert werden kann.

Was auch immer Sie geht in in die Aufrufmethode übergeben wollen, nicht den Konstruktor

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

beachten Sie auch, dass, wenn Sie etwas haben Sie Invoke nicht InvokeAsync verwenden zu warten, wenn Sie InvokeAsync verwenden dann sollte Ihre Methodensignatur sein

Task<IViewComponentResult> InvokeAsync(string t) 

und innerhalb dieser Methode Sie erwarten etwas dh ein Anruf zu einem Dienst

+0

ahh! Vielen Dank, weiser Mann :) – SteinTheRuler

Verwandte Themen