Aspnetcore: ViewComponentTagHelper:允许可选参数

创建于 2017-04-28  ·  31评论  ·  资料来源: dotnet/aspnetcore

假设我们有一个 ViewComponent 类

C# class MyViewComponent { IViewComponentResult Invoke( bool showSomething = false ) { ... } }

如果不想显示某些东西,只在 Razor 中写<vc:my />会很棒。 目前你必须写<vc:my show-something="false" />

affected-medium area-mvc enhancement feature feature-razor-pages severity-major

最有用的评论

我相信它应该被标记为 bug

这是有效的:

<strong i="8">@await</strong> Component.Invoke(typeof(MyViewComponent));

这是行不通的

<vc:My />

这是预期的行为,由于您没有显示任何警告、错误、调试消息,什么都没有,这让很多人感到不安,想知道为什么视图组件没有呈现

所有31条评论

同意。 不知道这有多可行,但我同意这种观点:微笑:

这似乎很可行。 我们需要教这段代码关于默认值的知识。 目前它说每个参数都是必需的属性

@rynowak的 preview2 候选人?

我要把它搬进去并标记它以备不时之需。 此时锁定我们的公共 API 并完成工具故事需要优先考虑。

真的很期待这个修复。 就目前的情况而言,使用 VC 标签助手是非常危险的。 将新参数添加到现有且广泛使用的标签助手并错过更新它被调用的地方之一,它_在向浏览器发出服务器端标记时_静默失败_。 我想我们现在已经走得太远了,不能让它进入 2.0.0?

这不会适用于 2.0.0。 我们现在没有时间更新工具。

我相信它应该被标记为 bug

这是有效的:

<strong i="8">@await</strong> Component.Invoke(typeof(MyViewComponent));

这是行不通的

<vc:My />

这是预期的行为,由于您没有显示任何警告、错误、调试消息,什么都没有,这让很多人感到不安,想知道为什么视图组件没有呈现

那么这会进入下一个版本吗?

寻找有关此问题的更新。 这会很快添加吗? 相当令人沮丧的一个处理。

在发现这个问题并花一些时间追踪为什么我的名为 VC 的标签助手没有呈现任何输出后,来到这里说同样的话。

@rynowak

我想我会试一试,在阅读了这里的源代码(你的链接已经失效)之后,它似乎很容易修复。 但是,至少有两种方法(或者创建RequiredAttributeDescriptor和朋友的副本,或者移动到基本类/接口)来执行此操作,并且需要大量的代码更改。

@rynowak和/或@DamianEdwards ,请告诉@CamiloTerevinto ,因为我们希望看到这种改进。

更新了 ASP.NET Core 中的视图组件

所有视图组件参数都是必需的

视图组件中的每个参数都是必需的属性。 请参阅此 GitHub 问题。 如果省略任何参数:

  • InvokeAsync方法签名不匹配,因此该方法不会执行。
  • ViewComponent 不会呈现任何标记。
  • 不会抛出任何错误。

只是被它咬得很厉害(当我在我的应用程序中实现它时通知不存在)

是否有计划好的解决方案,或者在可预见的未来会保持这种状态? 因为这可能真的很危险,尤其是它会默默地失败……在编译时至少会有警告或类似的东西吗?

是的,我同意最后的评论。 我最近也被这个咬得很厉害,它只是默默地失败的事实并不好。

@rynowak是否有可能产生错误?

@rynowak将来会对此提供任何支持吗?

已经两年多了,老实说,在使用视图组件的任何地方都必须复制默认参数是一件痛苦的事。

@rynowak中正确的行号是什么

这似乎很可行。 我们需要教这段代码关于默认值的知识。 目前它说每个参数都是一个_required_属性

此代码:更新的链接,但可能不正确的行

感谢@Rick-Anderson 更新文档,但你甚至应该这样做是荒谬的。 这使得标签助手无法用于严肃的项目。 在重构或添加功能时让代码_静默_失败应该是完全不可接受的。 令我震惊的是,在首次被报道近三年后,它仍然开放。 有没有计划修复?!

aspnetcore 团队有没有人看过这个并给出了最终答案是否会实施? 我个人认为这是使视图组件真正有用并减少冗余代码的东西。 至少,我希望看到团队中的某个人拥有所有权并决定这个功能的命运。

@mkArtakMSFT @rynowak请检查和@rynowak你能检查

@rynowak中正确的行号是什么

这似乎很可行。 我们需要教这段代码关于默认值的知识。 目前它说每个参数都是一个_required_属性

此代码:更新的链接,但可能不正确的行

所以在 3 年内这个@rynowak家伙并没有解决这个问题

@brgrz你有没有想出一个解决方案? 因为如果“这个@rynowak ”不能想出一个,也许你可以来帮忙(试图成为建设性的,而不是破坏性的,你的评论没有给IMO带来任何好处......)

我必须同意,很遗憾地意识到还没有提议的解决方案,而且这个问题很久以前就已经报告过了,但永远不要忘记他们不是 1000 人在研究它,而且他们有很多领域要覆盖......所以我并不奇怪有些问题长期没有解决,对于每个开源项目来说都是一样的......(几乎)

我们将在 5.0 中添加对此的支持!

@brgrz你有没有想出一个解决方案? 因为如果“这个@rynowak ”不能想出一个,也许你可以来帮忙(试图成为建设性的,而不是破坏性的,你的评论没有给IMO带来任何好处......)

我必须同意,很遗憾地意识到还没有提议的解决方案,而且这个问题很久以前就已经报告过了,但永远不要忘记他们不是 1000 人在研究它,而且他们有很多领域要覆盖......所以我并不奇怪有些问题长期没有解决,对于每个开源项目来说都是一样的......(几乎)

@os1r1s110哦,拜托……别废话了,rynowak 在 3 年前发布了“这似乎很可行”。 我敢打赌,这个单一的问题让全世界的开发人员浪费了数百个小时的调试时间,同时也让他们头疼不已。

另外,ASP.NET Core 不是我的产品,也不是社区产品,它是 MS 产品。 即使我愿意,我也非常怀疑他们是否会接受我的解决方案,而 MS 员工会为此获得报酬。

@brgrz正如我所说,我也很遗憾它没有尽快修复,但我认为仍然有一种方法可以展示事物,而不是认为从事开源项目的每个人都欠你一些东西(有偿或无偿)。 是的,他们在 asp.net 核心和相关项目上工作是有报酬的,但这并不意味着他们有足够的资源来及时满足所有需求(我什至没有在这里专门谈论开源项目,现在每个可怕的领域都需要合格的员工)。

抱歉,如果我通过回复您的帖子冒犯了您,但我仍然认为这不是让事情发生变化的方式(而且我不认为这是“贡献者胡说八道”),即使它看起来确实让事情发生了变化.. .. :)

回到Next sprint planning ,因为我们在这个里程碑中没有达到这个目标。

我们已将此问题移至积压里程碑。 这意味着它不会在即将发布的版本中使用。 我们将在当前版本之后重新评估积压,并在那时考虑这个项目。 要详细了解我们的问题管理流程并对不同类型的问题有更好的期望,您可以阅读我们的分类流程

我们将在 5.0 中添加对此的支持!

这最终会成功吗?

@guitax考虑到它被延迟的次数以及它已被放回积压的事实,我想说机会真的非常低 😕 现在似乎新的优先级是 blazor。

让我们希望这最终会被实施,因为这是一个非常令人恼火的问题。 😂

至少,如果在文档中更清楚地说明这一要求,那就太好了。 缺少默认为标准值的属性是 HTML 中的常态; 直到我偶然发现了这个线程,我才想到视图组件需要它们。

此页面是否有帮助?
0 / 5 - 0 等级