Можно ли обновить ViewComponent на бритвенной странице asp.net core 2.1? - PullRequest
0 голосов
/ 06 июля 2018

Я обнаружил, что это можно сделать в asp.net MVC с использованием Ajax, см. Решения здесь Альтернатива Viewcomponent для обновления ajax и здесь ViewComponents не асинхронны

Одно решение, которое я нашел, в основном состоит в том, чтобы контроллер возвращал ViewComponent, а затем использовал Ajax для обновления.

Этот пример заимствован из ViewComponents не являются асинхронными

~ / HelloWorldViewComponent.cs

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

        return View("Default", model);
    }     
}

~ / HomeController.cs (я не могу заставить эту часть работать на бритвенных страницах)

public class HomeController : Controller
{
    public IActionResult GetHelloWorld()
    {
        return ViewComponent("HelloWorld");
    }
}

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

@model string[]
<ul>
    @foreach(var item in Model)
    {
        <li>@item</li>
    }
</ul>

~ / Wwwroot / index.html

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

Моя проблема в том, что я не могу заставить контроллер работать вместе с Razor Pages, я не могу понять, возможно ли это вообще.

1 Ответ

0 голосов
/ 07 июля 2018

TLDR

Откройте Startup.cs и замените его

app.UseMvc();

с этим

app.UseMvcWithDefaultRoute();

Подробнее

Шаблон ASP.NET Core Razor Pages (dotnet new razor) не поставляется с маршрутами контроллеров, поскольку он не поставляется с контроллерами. Самый простой способ добавить маршруты контроллера через UseMvcWithDefaultRoute(), что эквивалентно следующему:

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

При установленном маршруте URL ~/Home/GetHelloWorld сопоставляется с действием HomeController.GetHelloWorld().

Вот коммит GitHub , который демонстрирует ваш вариант использования в новом приложении ASP.NET Core Razor Pages.

См. Также

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

...