我可以通过 ajax 重新加载 asp 5/MVC 6 视图组件吗?

Can I reload an asp 5/MVC 6 View Component via ajax?

我正在使用 MVC 6,并且有一个当前注册到我站点的用户网格。在网格上方,我为 search/filter 功能构建了一个视图组件。它是通过

调用的
@Component.Invoke("UserSearchBar")

其中一项要求是能够保存和重新应用下拉列表的值,以便最终用户可以快速访问 his/her 常用搜索。我在所有已保存搜索的视图组件中添加了一个下拉列表。

用户保存搜索后,我想重新加载 UserSearchBar 视图组件以更新下拉列表。

我的问题是:

  1. 如何在按下按钮后通过 ajax 重新加载视图组件?
  2. 在这种情况下,由于视图组件和重新加载方面的限制,我应该使用 Partial 而不是视图组件吗?

我可以在视图组件中使用分部作为下拉列表。或者以编程方式向下拉列表中添加一个元素,但当我单击按钮以应用其中一个已保存的搜索时,我仍然会遇到重新加载视图组件的相同问题。


解决方案

在把问题写出来的过程中经过深思熟虑,我想出了一个更好(更正确?)的方法,不需要重新加载视图组件。保存时,对保存搜索方法进行 ajax 调用,并将一个元素添加到下拉列表中。在保存的搜索应用上,调用一个方法,该方法将 return 保存的搜索并应用它。

但是,我仍然想知道是否可以(以及如何)在 MVC 6 中重新加载视图组件。

您需要做的就是在 returns 视图组件的控制器中设置路由。例如:

public class MyController : Controller {
    public IActionResult GetMyViewComponent() {
        return ViewComponent("MyViewComponent", <arguments...>);
    }
}

然后您可以通过 AJAX 向此控制器发出 GET 请求,并用请求的结果替换旧的视图组件。

至于你应该使用局部组件还是视图组件,这取决于你,但我建议坚持使用视图组件,因为它允许你在组件本身内保留搜索栏的相关逻辑。