【问题标题】:How to avoid code duplication if multiple pages look almost the same?如果多个页面看起来几乎相同,如何避免代码重复?
【发布时间】:2019-05-01 13:22:04
【问题描述】:

我有几页,例如Product 看起来几乎一样。我有Product/AddProduct/Modify/{id} 页面,其中一个是添加新Product 的空表单,第二个页面已经填充了当前产品的数据,并且可以使用其他信息进行更新。因为 Razor Pages 将其分为 AddModify 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


【解决方案1】:

您可以通过发送 Product 模型的新对象(id 属性中没有数据)和创建的对象(id 属性中的数据)来创建一个用于创建和编辑的页面,以防编辑。并且在视图中,您可以根据发送的对象进行渲染(无论它是否是新的)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-02-26
    • 2023-03-27
    • 1970-01-01
    • 2019-02-13
    • 1970-01-01
    • 1970-01-01
    • 2011-08-29
    • 1970-01-01
    相关资源
    最近更新 更多