ajax refresh

时间:2015-09-16 21:09:25

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

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

有没有办法实现这个目标?根据我的阅读,这是不可能的,虽然这些信息有点过时了。 如果不可能,最好的选择是什么?

1 个答案:

答案 0 :(得分:26)

在beta7上,现在可以直接从控制器返回ViewComponent。检查the announcement

的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建议的解决方法,或者使用these answers中描述的方法