13

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

@Component.Invoke("UserSearchBar")

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

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

我的问题是:

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

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


解决方案

在写出问题的同时考虑问题后,我想出了一个更好(更正确?)的方法,它不涉及重新加载视图组件。在保存时,对保存搜索方法进行 ajax 调用并将一个元素添加到下拉列表中。在保存的搜索应用上,调用将返回保存的搜索并应用它的方法。

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

4

1 回答 1

23

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

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

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

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

于 2016-01-07T14:04:35.780 回答