当前位置: 首页 > 知识库问答 >
问题:

ASP.NET核心MVC未找到网址的网页

尚景焕
2023-03-14

我目前正在学习。NET核心,我正试图在ASP.NET核心MVC 3.1中使用身份框架进行用户管理。在< code >控制器中,我有一个< code > RoleManagerController ,带有< code>EditRole 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);
    }

基于EditRoleGET,我在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>

这是我在“启动”中配置的内容.cs


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

但是当我尝试编辑角色并使用角色id访问路线时,页面显示< code >没有找到该网址的网页。。我错过了什么吗?

共有2个答案

雷飞虎
2023-03-14

只是一会儿,我决定检查所有与问题路径相关的脚本,我意识到我在索引中的编辑按钮中提供的标记助手。链接到路由的cshtml被设置为asp路由id=@role。Id将不起作用,然后我尝试将其更改为asp route roleId=@role。Id,roleId是我在RoleManager ViewModel中定义的。现在它运行良好。

欧阳鸿德
2023-03-14

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

如果将此部分放入“单独区域”中,则必须在启动时定义一个新路由.cs相同:

routes.MapRoute(
                name: "areas",
                template: "{area:exists}/{controller=Home}/{action=Index}/{id?}"
                );
 类似资料:
  • 本文向大家介绍Asp.net MVC定义短网址的方法,包括了Asp.net MVC定义短网址的方法的使用技巧和注意事项,需要的朋友参考一下 在MVC的逻辑代码里,Controller和Action是必须的,但是在网址里,并不需要完全体现Controller和Action。比如我们经常希望看到http://localhost/About而不是http://localhost/Home/About。

  • 在 ASP.NET Core-5 Web API 中,我有: appsettings.json: launchSettings.json: 这是We API的启动类,我在其中调用了扩展 启动: 我得到了这个错误: 找不到此本地主机页 未找到网址的网页:https://localhost:44358/ 如何解决此错误? 谢谢

  • 在ASP.NET MVC5中,您可以抛出一个带有HTTP代码的HttpException,这将设置如下所示的响应: ASP.NET核心中不存在。等价代码是什么?

  • 我刚刚开始使用CoreNLP版本3.6.0。我已经从这个网站下载了这个版本。使用命令行管道,我已经能够执行标准管道注释器,但是truecase注释器遇到了一个问题: 这是终端输出的副本: 有什么想法吗?

  • .NET核心和ASP.NET核心到底有什么区别?

  • 问题内容: 我在不同的机器上使用Selenium来自动化MVC Web应用程序的测试。 我的问题是我无法获取每台计算机的基本URL。 我可以使用以下代码获取当前网址: 但这对我需要导航到其他页面没有帮助。 理想情况下,我可以使用以下内容导航到不同的页面: 我正在使用的可能的解决方法是: 有没有更好的方法可以做到这一点? 问题答案: 解决此问题的最佳方法是创建URL实例。 这是因为.NET中的 类已