Asp.Net核心3中的视图未在控制器中找到动作

问题描述 投票:1回答:2

我正在尝试从视图中调用操作FileUploadAsync。仅调用Index操作的刷新按钮可以正常工作。视图上的上传按钮返回404找不到...无法想到原因。

控制器:

[Area("Admin")]
public class MetricController : Controller
{
    public async Task<IActionResult> Index()
    {
        var allBlobs = await _azureBlobService.ListAsync();
        return View(allBlobs);
    }

    public async Task<IActionResult> FileUploadAsync()
    {
        var request = await HttpContext.Request.ReadFormAsync();
        if (request.Files == null)
        {
            return BadRequest("files not uploaded");
        }

        var files = request.Files;
        if (files.Count == 0)
        {
            return BadRequest("files empty");
        }

        await _azureBlobService.UploadAsync(files);
        return RedirectToAction("Index");
    }
}

查看:

<div class="container-fluid">
    <div class="btn btn-primary btn-sm">
        <span>Select Files</span><input type="file" id="file" name="selectFiles" class="upload" onchange="DisplayFilesToUpload()" multiple />
    </div>
    <p id="FilesToUpload"></p>
    @if (Model != null && Model.Count > 0)
    {
        foreach (var item in Model)
        {
            <div>
                <p class="text-secondary">@item</p>
            </div>
        }
    }
    <a asp-area="Admin" asp-controller="Metric" asp-action="Index" class="btn btn-outline-primary btn-sm">
        Refresh
    </a>
    <a asp-area="Admin" asp-controller="Metric" asp-action="FileUploadAsync" class="btn btn-outline-primary btn-sm">
        Upload
    </a>
    <a asp-action="DeleteAll" class="btn btn-outline-danger btn-sm">
        Delete All
    </a>
    @section scripts{
        <script type="text/javascript" src="~/js/metrics.js"></script>
    }
</div>

编辑:Startup.cs上,路由定义如下:

app.UseEndpoints(endpoints =>
            {
                endpoints.MapControllerRoute(
                    name: "default",
                    pattern: "{area=Agent}/{controller=Article}/{action=Index}/{id?}");
                endpoints.MapRazorPages();
            });

所以这不是问题...

c# html asp.net-core
2个回答
1
投票

这已在github中讨论:https://github.com/aspnet/AspNetCore/issues/8998

Async后缀。]]

3.0之前,可通过Admin/Metric/FileUploadAsync进行操作。链接的生成需要指定异步后缀,例如

<a asp-area="Admin" asp-controller="Metric" asp-action="FileUploadAsync" class="btn btn-outline-primary btn-sm"> Upload </a>

在3.0中,操作可以通过Admin/Metric/FileUpload进行路由,并且链接生成将不需要指定异步后缀。

一种解决方案是,您可以将视图代码更改为以下代码:

<a asp-area="Admin" asp-controller="Metric" asp-action="FileUpload" class="btn btn-outline-primary btn-sm"> Upload </a>

另一种解决方案是您可以禁用此行为,在启动ConfigureConfigs中添加以下代码:

services.AddMvc(options => { options.SuppressAsyncSuffixInActionNames = false; });


0
投票
尝试将视图更改为此:
© www.soinside.com 2019 - 2024. All rights reserved.