【发布时间】:2019-05-01 13:22:04
【问题描述】:
我有几页,例如Product 看起来几乎一样。我有Product/Add 和Product/Modify/{id} 页面,其中一个是添加新Product 的空表单,第二个页面已经填充了当前产品的数据,并且可以使用其他信息进行更新。因为 Razor Pages 将其分为 Add 和 Modify PageModels,所以我对它们每个都有不同的 cshtml 视图。
我尝试使用 ViewComponents 来构建这些视图的可重用部分,但只有当您只想显示 数据时,它们才有用。因为 ViewComponents 不支持绑定,所以我剩下的就是以某种方式发送 ajax 请求并附加要提交的数据,这听起来甚至是错误的,而且可能不是正确的方法。
有没有其他方法可以不重复创建这些页面?
【问题讨论】:
-
Partials 仅适用于显示数据。 ViewComponents 更强大^_^
-
@AdamVincent ViewComponents 允许注入依赖项以检索数据,但无法修改此数据并从 ViewComponent 发回。例如。创建一个 ViewComponent ,其中包含用户可以选择的项目列表,然后发回有关用户选择的项目的帖子信息。
-
在我看来,代码重复在所讨论的抽象层 (UI) 上的问题要少得多。更重要的是您的业务逻辑是可重用的,但是如果您将 /Product/Modify 与一段视图逻辑绑定到 /User/Modify,那么当您去更新可能会迅速变化的产品时,您就有可能会崩溃/用户/
-
您是对的,使用 ViewComponents 您可以传入调用代码所具有的 viewData 的副本。如果您想在 razorpages 中对 api 控制器进行 ajax 调用,您可以搭建一个新页面,然后像经典 api 控制器一样返回 JSON(而不是 Page),或者您可以将 api 控制器与 razorpages 并排使用。
-
@AdamVincent 如果我的视图包含定制的双重列表怎么办。我希望这个列表在每一页上都一样。它基本上允许我从一个列表中选择几个项目并将它们移动到另一个。但是我需要发送有关在帖子中选择了哪些项目的信息。使用 ViewComponents 我不能这样做,因为它们不允许绑定。
标签: c# asp.net-core .net-core razor-pages