【问题标题】:Can I invoke methods on a view component from javascript?我可以从 javascript 调用视图组件上的方法吗?
【发布时间】:2020-04-16 18:35:25
【问题描述】:

我做了一个组件:

public class CatSearchComponent : ViewComponent
{
    public async Task<IViewComponentResult> InvokeAsync()
    {
        return View();
    }
}

@await Component.InvokeAsync("CatSearchComponent")

在组件中,我有一个按钮,我想使用 jquery $.ajax 来调用方法并在组件中呈现一些数据,例如一个名为 GetCats() 的操作,它返回一些 Json 数据。

最好将此方法放入组件中,因为它是特定于组件的。

但是我不确定将什么 url 放入我的 $.ajax 调用中以调用这样的方法,或者即使它在 MVC 中是允许的。

我可以创建一个新控制器并对其执行操作以获取数据,但如果它与我的 ViewComponent 结合使用会更好。有没有办法做到这一点?

【问题讨论】:

  • 我不认为这是可行的。除了在 mvc 模式中使用控制器之外,我没有看到任何解决方法。
  • 没有。将视图组件视为一种将一些复杂逻辑包装在部分周围的简单方法。它不是继续存在的东西,也不是像控制器这样对请求做出反应的东西;它在视图渲染期间被实例化,然后被转储。
  • 我实在是根本看不到视点组件,你还不如干脆创建一个我觉得的控制器。除非我缺少某些优势,否则它就像一个控制器,迫使您只有一种方法

标签: c# asp.net-core-mvc asp.net-core-2.2


【解决方案1】:

碰巧你可以,但不能直接。

你可以在MVC Controller中创建一个ActionResult,它返回ViewComponent结果;然后,在 JavaScript/jQuery 中调用 Controller。

有关完整描述和代码,请参阅此 StackOverflow 答案:

Viewcomponent alternative for ajax refresh

(完全归功于@daniel-j-g)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-11-14
    • 2016-01-30
    • 2023-01-22
    • 1970-01-01
    • 1970-01-01
    • 2017-02-14
    • 2011-06-16
    相关资源
    最近更新 更多