是否可以在 ASP.NET Core 2.1 Razor 页面中刷新视图组件?

E. *_*ist 5 ajax asp.net-mvc asp.net-core razor-pages asp.net-core-viewcomponent

是否可以在 ASP.NET Core 2.1 Razor 页面中刷新视图组件?

我发现这在使用 AJAX 的 ASP.NET MVC 中是可能的 - 请参阅Viewcomponent 替代解决方案,用于 ajax 刷新ViewComponents 不是 async。但是 ASP.NET Core 呢?

我发现的一种解决方案基本上是让控制器返回视图组件,然后使用 AJAX 进行刷新。

这是从ViewComponents借来的例子不是异步的

~/HelloWorldViewComponent.cs

public class HelloWorldViewComponent : ViewComponent
{
    public IViewComponentResult Invoke()
    {
        var model = new string[]
        {
            "Hello", "from", "the", "view", "component."  
        };

        return View("Default", model);
    }     
}
Run Code Online (Sandbox Code Playgroud)

~/HomeController.cs(我无法让这部分在剃刀页面中工作)

public class HomeController : Controller
{
    public IActionResult GetHelloWorld()
    {
        return ViewComponent("HelloWorld");
    }
}
Run Code Online (Sandbox Code Playgroud)

~/Views/Shared/Components/HelloWorld/Default.cshtml

@model string[]
<ul>
    @foreach(var item in Model)
    {
        <li>@item</li>
    }
</ul>
Run Code Online (Sandbox Code Playgroud)

~/wwwroot/index.html

<body>
<script src="js/jquery.min.js"></script>
<script>
    $.get("home/GetHelloWorld", function(data) {
        $("body").html(data);
    });
</script>
</body>
Run Code Online (Sandbox Code Playgroud)

我的问题是我无法让控制器与 Razor Pages 一起工作,我无法弄清楚这是否可能。

Sha*_*tin 1

总长DR

打开 Startup.cs 并替换它

app.UseMvc();
Run Code Online (Sandbox Code Playgroud)

有了这个

app.UseMvcWithDefaultRoute();
Run Code Online (Sandbox Code Playgroud)

细节

ASP.NET Core Razor Pages 模板 ( dotnet new razor) 不附带控制器路由,因为它不附带控制器。添加控制器路由的最简单方法是 via UseMvcWithDefaultRoute(),它相当于以下内容:

app.UseMvc(routes => 
{
    routes.MapRoute(
        name: "default",
        template: "{controller=Home}/{action=Index}/{id?}");
});
Run Code Online (Sandbox Code Playgroud)

安装该路由后,URL~/Home/GetHelloWorld就会映射到HomeController.GetHelloWorld()操作。

以下是GitHub 提交,演示了新的 ASP.NET Core Razor Pages 应用程序中的用例。

也可以看看

https://learn.microsoft.com/en-us/aspnet/core/mvc/controllers/routing?view=aspnetcore-2.1