【问题标题】:How to navigate to an ASP.NET Core MVC controller in Blazor app?如何导航到 Blazor 应用程序中的 ASP.NET Core MVC 控制器?
【发布时间】:2020-04-26 15:57:59
【问题描述】:

我有DownloadController.csControllers/DownloadController,方法如下:

public async Task<ActionResult> DownloadFile(string key) 
{
    return File(...);
}

另外,在我的Startup.cs 中,我配置了以下端点:

app.UseEndpoints(endpoints =>
{
    endpoints.MapControllerRoute(
        name: "default".
        pattern: "{controller}/{action}");
    endpoints.MapControllers();
    endpoints.MapBlazorHub();
    endpoints.MapFallbackToPage("/_Host");
});

那么如何在 Blazor 视图中导航到控制器操作?我正在寻找类似的东西:

@Html.ActionLink(...);

【问题讨论】:

  • 我说的是导航到控制器动作,而不是页面。
  • 你的“问题”解决了吗?有没有类似的?

标签: c# asp.net-mvc razor controller blazor


【解决方案1】:

应该这样做:

@page "/MvcLinkExample"
@inject NavigationManager NavigationManager

<button @onclick="NavigateToMvcPage">MVC Link</button>

@code {
    private void NavigateToMvcPage()
    {
        NavigationManager.NavigateTo("controllername/actionname/10", true);
    }
}

【讨论】:

  • 我确实是这样,但是,我得到了 404。控制器的结构与正常情况有什么不同吗?你知道我的端点配置是否正确吗?
  • NavigateTo 方法的第二个参数 (true) 对我有帮助。我认为这个答案是正确的。
  • 这是一个有趣的问题,对控制器名称的任何更改都会导致这些字符串字段不同步并中断通信。如果大量使用 Blazor 和 MVC 之间的交叉通信,则在框架中实现通用 MVC 导航管理器可能是一个好主意。
  • 您总是可以使用反射来获取名称
【解决方案2】:

MVC 使用“路由”来配置端点(控制器/动作/区域)映射。

在您提供的示例中,路由将解析为 http(s)://[hostname or ip]/Download/DownloadFile/。

使用“默认路由”,可以通过 ?key=[value-xxx] 提供“key”查询字符串参数作为基本实现。

【讨论】:

  • 我已经尝试过了,但是我得到了 404。
猜你喜欢
  • 2020-10-12
  • 2020-02-24
  • 1970-01-01
  • 2016-10-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-11-13
相关资源
最近更新 更多