【问题标题】:ASP.NET Core MVC no webpage was found for web addressASP.NET Core MVC 没有找到网址的网页
【发布时间】:2021-06-26 02:22:54
【问题描述】:

我目前正在学习 .NET Core,我正在尝试使用 ASP.NET Core MVC 3.1 中的 Identity 框架进行用户管理。在Controllers 我有一个RoleManagerControllerEditRole GET 和 POST 像这样:

    [HttpGet]
    public async Task<IActionResult> EditRole(string roleId)
    {
        ViewBag.roleId = roleId;

        var role = await _roleManager.FindByIdAsync(roleId);

        if (role == null)
        {
            ViewBag.ErrorMessage = $"Role with RoleID = {roleId} doest not exists.";
            return NotFound();
        }

        // create new roleModel 
        var roleModel = new EditRoleViewModel
        {
            RoleId = role.Id,
            RoleName = role.Name
        };

        // retrieve all users based on current role 
        foreach (var user in _userManager.Users.ToList())
        {
            if (await _userManager.IsInRoleAsync(user, role.Name))
            {
                roleModel.Users.Add(user.UserName);
            }
        }

        return View(roleModel);
    }

    [HttpPost]
    public async Task<IActionResult> EditRole(EditRoleViewModel roleModel)
    {
        var role = await _roleManager.FindByIdAsync(roleModel.RoleId);

        if (role == null)
        {
            ViewBag.ErrorMessage = $"Role with RoleId = {roleModel.RoleId} does not exists.";
            return NotFound();
        }
        else
        {
            role.Name = roleModel.RoleName;
            // update the role 
            var updateStatus = await _roleManager.UpdateAsync(role);

            // check while updating is succeed or not 
            if (updateStatus.Succeeded)
            {
                return RedirectToAction("Index");
            }

            foreach (var error in updateStatus.Errors)
            {
                ModelState.AddModelError("updating failed", error.Description);
            }   
        }

        return View(roleModel);
    }

基于EditRole GET,我在Views/RoleManager 文件夹中创建了一个名为EditRole.cshtml 的视图,如下所示:

@model EditRoleViewModel
@{ 
    ViewData["Title"] = "Edit Role";
} 

<h4>Edit Role</h4><br />

<form class="" method="post">
    <div asp-validation-summary="All" class="text-danger"></div>
    <div class="form-group">
        <label asp-for="RoleId" class="col-sm-2 col-form-label"></label>
        <div class="col-sm-10">
            <input asp-for="RoleId" class="form-control" disabled/>
        </div>
    </div>
    <div class="form-group">
        <label asp-for="RoleName" class="col-sm-2 col-form-label"></label>
        <div class="col-sm-10">
            <input asp-for="RoleName" class="form-control"/>
            <span asp-validation-for="RoleName" class="text-danger"></span>
        </div>
    </div>
    <div class="form-group">
        <div class="col-sm-10">
            <button type="submit" class="btn btn-primary">Update</button>
            <a asp-action="Index" class="btn btn-secondary">Cancel</a>
        </div>
    </div>
</form>

这是我在Startup.cs配置的东西


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

但是当我尝试编辑角色并使用角色的 id 访问路由时,页面显示no webpage was found for the web address.。我错过了什么吗?

【问题讨论】:

  • 设置断点,以便您需要运行哪些行。如果您看到 404 并不奇怪,因为您的代码确实有这些行。
  • @LexLi 我已经在控制器的EditRole GET 中为几行设置了断点,但似乎没有触发。
  • those lines 是什么意思?你能为我指出我们的吗?
  • "使用角色的 id 访问路由页面" - 请显示您的视图您要访问的位置
  • @Serge 我正在尝试访问 /RoleManager/EditRole/{roleId}。我在控制器中提供了一个EditRole GET 并为它添加了一个视图EditRole。但是当我尝试访问该路由时,错误提示找不到该页面。

标签: c# asp.net-core-mvc


【解决方案1】:

问题可能是你没有指定区域!

如果您将此部分放入单独的区域,则必须在 startup.cs 中定义一条新路线,与此相同:

routes.MapRoute(
                name: "areas",
                template: "{area:exists}/{controller=Home}/{action=Index}/{id?}"
                );

【讨论】:

    【解决方案2】:

    我决定检查所有与问题路由相关的脚本,然后我意识到我在 Index.cshtml 的 Edit 按钮中提供的标签助手,该路由链接设置为 asp-route- id=@role.Id 这不起作用,然后我尝试将其更改为 asp-route-roleId=@role.Id ,roleId 是我在 RoleManagerViewModel 中定义的。现在效果很好。

    【讨论】:

      猜你喜欢
      • 2018-05-31
      • 2021-11-15
      • 1970-01-01
      • 2022-11-13
      • 2020-03-09
      • 2013-08-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多