Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/36.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在MVC Web应用程序中删除ASP.NET标识时出现问题_C#_Asp.net_Asp.net Mvc - Fatal编程技术网

C# 在MVC Web应用程序中删除ASP.NET标识时出现问题

C# 在MVC Web应用程序中删除ASP.NET标识时出现问题,c#,asp.net,asp.net-mvc,C#,Asp.net,Asp.net Mvc,因此,在查阅了有关如何删除ASP用户的指南和教程后,我发现以下代码非常简洁: [HttpPost] [ValidateAntiForgeryToken] public async Task<ActionResult> DeleteConfirmed(string id) { if (ModelState.IsValid) { if (id == null) {

因此,在查阅了有关如何删除ASP用户的指南和教程后,我发现以下代码非常简洁:

 [HttpPost]
    [ValidateAntiForgeryToken]
    public async Task<ActionResult> DeleteConfirmed(string id)
    {
        if (ModelState.IsValid)
        {
            if (id == null)
            {
                return new HttpStatusCodeResult(HttpStatusCode.BadRequest);
            }

            var user = await UserManager.FindByIdAsync(id);
            var logins = user.Logins;
            var rolesForUser = await UserManager.GetRolesAsync(id);

            using (var transaction = context.Database.BeginTransaction())
            {
                foreach (var login in logins.ToList())
                {
                    await UserManager.RemoveLoginAsync(login.UserId, new UserLoginInfo(login.LoginProvider, login.ProviderKey));
                }

                if (rolesForUser.Count() > 0)
                {
                    foreach (var item in rolesForUser.ToList())
                    {
                        // item should be the name of the role
                        var result = await UserManager.RemoveFromRoleAsync(user.Id, item);
                    }
                }

                await UserManager.DeleteAsync(user);
                transaction.Commit();
            }

            return RedirectToAction("Index");
        }
        else
        {
            return View();
        }
    }
[HttpPost]
[ValidateAntiForgeryToken]
公共异步任务


@ActionLink(“编辑”,“编辑”,新的{id=user.UserId})|
@ActionLink(“删除”,“删除确认”,新的{id=user.UserId})
理论上,单击此处的“Delete”后,它应该从名为“ManageUsersController”的控制器调用DeleteConfirmation方法。但是,它返回以下错误:

“/”应用程序中出现服务器错误

找不到资源

描述:HTTP404。您正在查找的资源(或其依赖项之一)可能已被删除、名称已更改或暂时不可用。请检查以下URL并确保其拼写正确

请求的URL:/ManageUsers/DeleteConfirmed/29ad177f-0285-43d2-b065-109876f270b9


这里可能出了什么问题?是否有其他方法可以在控制器中编写该方法?提前感谢

此答案基于.NET scaffold为我们提供的默认代码

  • 您正在使用
    ActionLink
    的扩展名生成
    Delete
    链接,该扩展名需要链接文本作为第一个参数,操作名称作为第二个参数。您的
    deleteConfixed
    操作是一种
    POST
    方法;无法生成到POST的链接,.NET查看链接的获取方法。因此:
  • 如果在单击“删除”按钮时需要删除用户,则应使用POST表单,其中包括用户id和防伪令牌作为隐藏输入,并使用提交按钮而不是链接。但最好的做法是向用户展示他们正在删除的内容。这就是为什么.NET生成了两个相关的删除操作<代码>删除(查看)和删除确认(实际删除)

非常感谢您的帮助!我创建了一个名为
Delete
的新GET方法,如下所示:
[HttpGet]public ActionResult Delete(){return RedirectToAction(“Index”);}
但是现在错误是:
请求的URL:/ManageUsers
-删除
GET方法的内容应该是什么?@Questieme不客气。我想那将是一次很长的谈话。因此,我建议您全面了解ASP MVC的工作原理。如果您有另一个由.NETscaffolding系统生成的控制器,一定要看看。请检查ASP.NET文档。@Questieme但目前为1。您不需要
[HttpGet]
;这是默认值。2.对于
Delete
,您需要一个
id
参数。3.您需要从上下文(DB等)中通过该
id
获取
用户。4.在删除之前,您需要将该
用户
传递到视图文件以向用户显示它。5.查看文件必须具有上述POST表单,因此在提交时将触发
deleteConfixed
<td>
    @Html.ActionLink("Edit", "Edit", new { id = user.UserId }) |
    @Html.ActionLink("Delete", "DeleteConfirmed", new { id = user.UserId })
</td>
<td>
  @Html.ActionLink("Edit", "Edit", new { id = user.UserId }) |
  @Html.ActionLink("Delete", "Delete", new { id = user.UserId })
</td>