【问题标题】:How to use partial views in asp.net razor-pages properly?如何正确使用 asp.net razor-pages 中的部分视图?
【发布时间】:2020-06-26 09:29:53
【问题描述】:

我目前正在从事 asp.net core mvc 项目。有一个主页(cshtml),其中包含一些数据和两个部分视图。

此页面的控制器包含动作,它将模型返回到视图(使用模型绑定)。我猜想在控制器中为将数据返回到两个局部视图而创建的另外 2 个操作会正常工作。但现在我的应用程序无法正常工作,因为它试图将数据从主页传递到部分视图,从而产生绑定错误(部分视图都有其独特的模型)。

我目前正在使用<partial> 标签将我的部分视图添加到主视图中。这个标签包含一个属性view-data,它可以解决模型绑定的问题。但是感觉像创建一个包含很多子对象的大联合对象以通过view-data 传递它不是一个好习惯。

所以我想就处理此类案件的最佳做法发表意见。用这样的多个分离数据创建页面的最佳方法是什么?

我目前的观点是,最好的方法是让主视图从控制器获取可行的信息,并在部分视图中通过 ajax 获取。但无论如何,仍然存在一个问题,如何绕过这个错误,应用程序试图将数据从主视图传递到部分视图(就像我想在部分视图中保持模型绑定以用 ajax 填充它)。

【问题讨论】:

  • 您必须在控制器中创建一个包含所有内容的模型......并且该模型必须具有两个属性,每个属性每个视图的类型......所以从主视图时你调用部分视图你传递相应属性的值......像这样
  • 请记住, 标签还有一个“model”属性,您可以使用该属性将模型传递给它。
  • @JonathanAlfaro 还有没有别的办法?听起来有点糟糕。就像我必须等到这个大对象获得所有数据一样。可能是 4-5 db 请求。我想用 ajax 制作它要好得多。但我仍然不明白如何通过绑定绕过这个错误。也许我只需要在全景视图中拒绝模型绑定?
  • 把它变成 ajax 是最糟糕的,因为不仅你仍然需要发出相同的 4-5 db 请求,而且现在你已经添加了两个额外的 http 请求。
  • 也就是说,如果你想让它成为 ajax,你可以在页面或控制器上创建两个额外的操作并返回部分视图......然后从 ajax 调用中获取结果并将其分配给例如 div 的内容

标签: c# asp.net asp.net-core razor-pages


【解决方案1】:

所以经过一些研究,我得出了结论并找到了解决我问题的方法。 PartialViews 不适用于此类情况。 PartialView 总是依赖于来自其父 View 的模型信息。

相反,如果您想实现与我相同的行为,您应该使用ViewComponents。它是完全独立的工具,能够访问自己的数据并构建所需的任何模型。您还可以在视图甚至布局中的任何位置访问ViewComponent,甚至可以通过名称将参数传递给它。

我希望这篇文章对任何人都有帮助。这是msdn在how to implement and use view components的官方指南

【讨论】:

    猜你喜欢
    • 2020-10-04
    • 2018-12-19
    • 2019-07-27
    • 2021-07-14
    • 2011-05-04
    • 1970-01-01
    • 2018-04-05
    • 2021-07-11
    • 2021-01-28
    相关资源
    最近更新 更多