Asp.net core mvc .Net核心视图组件赢得';没有自定义视图模型无法工作

Asp.net core mvc .Net核心视图组件赢得';没有自定义视图模型无法工作,asp.net-core-mvc,Asp.net Core Mvc,我有一个MVC.NETCore2.0应用程序(在我升级它之前它最初是1.1版),它有一个奇怪的特性。为了从我的页面调用视图组件,我必须创建一个自定义视图模型。如果我使用一个内置类型,比如字符串,路由处理程序将无法找到它 例如: 我创建了一个非常简单的ViewComponent,我试图从我的视图中调用它,它只需要一个字符串。但是如果我使用InvokeAsync(string)而不是InvokeAsync(customVm)创建,我会得到一个错误,提示路由正在尝试将string参数用作路径的一部分

我有一个MVC.NETCore2.0应用程序(在我升级它之前它最初是1.1版),它有一个奇怪的特性。为了从我的页面调用视图组件,我必须创建一个自定义视图模型。如果我使用一个内置类型,比如字符串,路由处理程序将无法找到它

例如: 我创建了一个非常简单的ViewComponent,我试图从我的视图中调用它,它只需要一个字符串。但是如果我使用InvokeAsync(string)而不是InvokeAsync(customVm)创建,我会得到一个错误,提示路由正在尝试将string参数用作路径的一部分

视图组件:

public class SkilledQaPreviousComments : ViewComponent
{
    public async Task<IViewComponentResult> InvokeAsync(string vm)
    {
        return View(vm);
    }
}
Startup.cs:

app.UseMvc(routes =>
{
    routes.MapRoute(name: "areaRoute", template: "{area:exists}/{controller=Home}/{action=Index}/{id?}");
    routes.MapRoute(name: "default", template: "{controller=Home}/{action=Index}/{id?}");
});
文件位置:

给出的错误消息Model.qavieveditreasonprevious=“[\”single\“]”:

找不到视图“Components/SkilledQaPreviousComments/[“test”]”。搜索了以下地点: /区域/NurseForms/Views/Signature/Components/SkilledQaPreviousComments/[“测试”].cshtml /区域/NurseForms/Views/Shared/Components/SkilledQaPreviousComments/[“测试”].cshtml /Views/Shared/Components/SkilledQaPreviousComments/[“test”].cshtml

如果我将视图组件更改为接受一个int并传递1,我只会得到与“1”相同的错误,而不是“[“test”]”

我就是不明白为什么它不寻找Default.cshtml。项目中的其他视图组件正在工作,但每个组件都有一个自定义视图模型。我不希望每次创建一个自定义视图模型来保存一个字符串,但现在这是我唯一的选择


想法/明显的事情我做错了?

对于这个问题,它是由您想要返回的missmatch
View
方法引起的

检查源代码,它定义了以下返回
视图的方法:

public ViewViewComponentResult View<TModel>(string viewName, TModel model);
public ViewViewComponentResult View<TModel>(TModel model);
public ViewViewComponentResult View(string viewName);
public ViewViewComponentResult View();

谢谢陶,这就是问题所在!
public ViewViewComponentResult View<TModel>(string viewName, TModel model);
public ViewViewComponentResult View<TModel>(TModel model);
public ViewViewComponentResult View(string viewName);
public ViewViewComponentResult View();
        public async Task<IViewComponentResult> InvokeAsync(string vm)
    {
        return View<string>(vm);
    }