【问题标题】:asp.net core 1 rc2: Creating a view componentasp.net core 1 rc2:创建视图组件
【发布时间】:2016-05-28 08:20:05
【问题描述】:

我将一个 aspnet 5 rc1 项目完全迁移到 aspnet core-rc2 中,并确保一切都像以前一样工作;但是,我似乎无法让我的 ViewComponents 在 rc2 中工作,而且我不确定如何以“新”方式实现它。

这是我现在的设置方式:

我拥有的 .cshtml 文件中的某处:

 @Component.Invoke("AddActivity", Model.Id)

然后我在文件夹中有视图组件

public class AddActivityViewComponent : ViewComponent
{
    public IViewComponentResult Invoke(int id)
    {
        ActivityViewModel model = new ActivityViewModel();
        model.IssueId = id;

        return View("ActivityModal", model);
    }
}

这样,它通常会在共享文件夹中返回 ActivityModal cshtml,但是 RC2 似乎要求一个实现 IViewComponentHelper 的类?

如果我做错了什么或者有更好的方法,请告诉我

【问题讨论】:

    标签: asp.net asp.net-core-mvc asp.net-core-1.0


    【解决方案1】:

    注意:同步 API 已在 rc2 中删除。

    你的代码可能是这样的:

    public class AddActivityViewComponent : ViewComponent
    
    {
    
        public IViewComponentResult InvokeAsync(int id)
        {
            ActivityViewModel model = new ActivityViewModel();
            model.IssueId = id;
    
            return View("ActivityModal", model);
        }
    }
    
    @Component.InvokeAsync<AddActivityViewComponent>(new { id = Model.Id})
    

    或

    @await Component.InvokeAsync<AddActivityViewComponent>(new { id = Model.Id})
    

    【讨论】:

    • 谢谢!您对上述代码的建议 + @await Component.InvokeAsync(new { id = Model.Id}) 效果很好。
    • 这对我仍然不起作用。我不得不像这样“public async Task InvokeAsync(int id)”这样更改方法签名......并且必须用 await 调用它,否则它会返回一个奇怪的字符串而不是视图
    【解决方案2】:

    似乎他们改变了在 RC2 中调用组件的方式。现在 Invoke 方法只接受一个带有“键/值对”作为参数的参数。
    所以也许这样的事情会起作用:

    @Component.Invoke("AddActivity", new { id = Model.Id})
    

    更多信息here。

    【讨论】:

    • 我看到了这个,但我什至可以在 RC2 中调用一个没有参数的简单 ViewComponent。不知道怎么回事。我会尝试深入研究。
    【解决方案3】:

    Isaac 和 Andrey 说的是正确的。我只想补充: 参数名称需要匹配。

    在您的情况下,您需要使用new { id = Model.Id} 调用invoke,因为invoke 方法中的参数称为“id”。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-11-03
      • 1970-01-01
      • 2016-10-15
      • 2016-05-15
      • 2016-10-23
      • 1970-01-01
      • 2016-11-14
      相关资源
      最近更新 更多