我可以通过ajax重新加载asp 5 / MVC 6 View Component吗?

时间:2016-01-06 17:44:04

标签: ajax asp.net-core asp.net-core-viewcomponent

我正在玩MVC 6并且有一个用户网格,目前已注册到我的网站。在网格之上,我为搜索/过滤功能构建了一个View Component。它通过

调用
@Component.Invoke("UserSearchBar")

其中一个要求是能够保存并重新应用下拉列表的值,以便最终用户可以快速访问他/她经常使用的搜索。我在所有已保存搜索的View Component中添加了一个下拉列表。

用户保存搜索后,我想重新加载UserSearchBar View Component以更新下拉列表。

我的问题是:

  1. 如何在按下按钮后通过ajax重新加载视图组件?
  2. 在这种情况下,由于视图组件和重新加载的限制,我应该使用Partial而不是view组件吗?
  3. 我可以在View Component中使用Partial来下拉。或者以编程方式向下拉列表添加元素,但是当我单击按钮应用其中一个已保存的搜索时,我仍然会遇到重新加载视图组件的相同问题。

    解决方案

    在编写问题时仔细考虑了问题后,我想出了一种更好(更正确?)的方法,不需要重新加载View Component。在保存时,对保存搜索方法进行ajax调用,并在下拉列表中添加元素。在保存的搜索应用中,调用一个方法,该方法将返回已保存的搜索并应用它。

    但是,我仍然想知道是否有可能(以及如何)在MVC 6中重新加载View Component。

1 个答案:

答案 0 :(得分:16)

您需要做的就是在控制器中设置一个返回视图组件的路径。例如:

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

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

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