用于ajax刷新的Viewcomponent替代方案

用于ajax刷新的Viewcomponent替代方案,ajax,asp.net-core-mvc,asp.net-core-viewcomponent,Ajax,Asp.net Core Mvc,Asp.net Core Viewcomponent,我有一个viewcomponent,它包含一些嵌入在各种页面中的可重用业务逻辑。这一直运作良好。但是,我现在需要使用ajax刷新viewcomponent 有没有办法做到这一点?从我所读到的,这是不可能的,尽管这些信息有点过时。 如果不可能,最好的选择是什么?在beta7上,现在可以直接从控制器返回ViewComponent。检查机器的MVC/Razor部分 MVC中新的ViewComponentResult使返回结果变得很容易 从动作中删除ViewComponent。这使您可以轻松地公开 Vi

我有一个viewcomponent,它包含一些嵌入在各种页面中的可重用业务逻辑。这一直运作良好。但是,我现在需要使用ajax刷新viewcomponent

有没有办法做到这一点?从我所读到的,这是不可能的,尽管这些信息有点过时。
如果不可能,最好的选择是什么?

在beta7上,现在可以直接从控制器返回ViewComponent。检查机器的MVC/Razor部分

MVC中新的ViewComponentResult使返回结果变得很容易 从动作中删除ViewComponent。这使您可以轻松地公开 ViewComponent作为独立端点的逻辑

因此,您可以有一个简单的视图组件,如下所示:

[ViewComponent(Name = "MyViewComponent")]
public class MyViewComponent : ViewComponent
{
    public IViewComponentResult Invoke()
    {
        var time = DateTime.Now.ToString("h:mm:ss");
        return Content($"The current time is {time}");
    }
}
在控制器中创建一个方法,如:

public IActionResult MyViewComponent()
{
    return ViewComponent("MyViewComponent");
}
而且比我快速而肮脏的ajax刷新做得更好:

var container = $("#myComponentContainer");
var refreshComponent = function () {
    $.get("/Home/MyViewComponent", function (data) { container.html(data); });
};

$(function () { window.setInterval(refreshComponent, 1000); });

当然,在beta7之前,您可以创建一个视图作为@eedam建议的解决方案,或者使用

中描述的方法作为想法。。ajax需要一个url来获取新内容。这意味着在控制器中添加操作。该操作可能有一个调用ViewComponent的视图。感谢您的回答。由于时间有点紧,我刚从控制器返回了部分视图,解决了我的问题。当我们转到beta 7时,我可能会返回并重构到这个解决方案。嗨!你能发布一个javascript的详细示例吗?我们不能使用旧的@Ajax-helper吗?据我所知,Ajax-helper仍然是我们的一部分。关于JS,第三个代码段是最简单的JS,您需要刷新html中包含视图组件的部分,除了呈现布局之外,这是完美的。如何在没有布局的情况下进行渲染/我刚刚在RC1中尝试了上述解决方案,但没有返回布局。您使用的是RC1还是RC2?你试过上面的代码了吗?或者你有额外的代码吗?