我正在开发我的第一个asp.net核心项目,因此也是我的第一个视图组件。我以为我已经按照教程中的每一步,但我无法成功调用我的视图组件。
这是我的代码:
/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
我尝试这样调用:
@await Component.InvokeAsync("ItemList", new { t = "student" })
但我只得到:
InvalidOperationException:无法解析类型' System.String'的服务。在尝试激活' LC.CompuTECH._2017.ViewComponents.ItemListViewComponent'。
这应该是如此基本,所以我无法弄清楚我做错了什么。
任何帮助都将受到高度赞赏
答案 0 :(得分:2)
你的构造函数应该只接受可以注入的东西,即组件的依赖关系。
无论你想传入什么,都会进入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
}
}
}
另请注意,除非您有等待使用Invoke而不是InvokeAsync,否则如果您使用InvokeAsync,那么您的方法签名应为
Task<IViewComponentResult> InvokeAsync(string t)
并在该方法中等待一些东西,即对服务的调用