Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/29.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# 无法编辑IdentityRole_C#_Asp.net_Asp.net Mvc_Asp.net Mvc 5_Asp.net Identity - Fatal编程技术网

C# 无法编辑IdentityRole

C# 无法编辑IdentityRole,c#,asp.net,asp.net-mvc,asp.net-mvc-5,asp.net-identity,C#,Asp.net,Asp.net Mvc,Asp.net Mvc 5,Asp.net Identity,我有以下看法: @model Microsoft.AspNet.Identity.EntityFramework.IdentityRole @{ ViewBag.Title = Resources.Edit; } <h2>@Resources.EditRole</h2> @Html.ActionLink(Resources.ListRoles, "Index") | @Html.ActionLink(Resources.ManageUserRoles, "Ma

我有以下看法:

@model Microsoft.AspNet.Identity.EntityFramework.IdentityRole
@{
    ViewBag.Title = Resources.Edit;
}

<h2>@Resources.EditRole</h2>

@Html.ActionLink(Resources.ListRoles, "Index") | @Html.ActionLink(Resources.ManageUserRoles, "ManageUserRoles")
<hr />
<div class="row">
    <div class="col-md-8">
        <section id="editRoleForm">
            @using (Html.BeginForm("Edit", "Role", new { ReturnUrl = ViewBag.ReturnUrl }, FormMethod.Post, new { @class = "form-horizontal", role = "form" }))
            {
                @Html.AntiForgeryToken()
                <h4>@Resources.Role</h4>
                @Html.ValidationSummary(true, "", new { @class = "text-danger" })
                @Html.HiddenFor(model => model.Id)
                <div class="form-group">
                    @Html.LabelFor(m => m.Name, new { @class = "col-md-2 control-label" })
                    <div class="col-md-10">
                        @Html.TextBoxFor(m => m.Name, new { @class = "form-control" })
                        @Html.ValidationMessageFor(m => m.Name, "", new { @class = "text-danger" })
                    </div>
                </div>
                <div class="form-group">
                    <div class="col-md-offset-2 col-md-10">
                        <input type="submit" value="@Resources.Save" class="btn btn-default" />
                    </div>
                </div>
            }
        </section>
    </div>
</div>
最初,我尝试使用此方法而不是第二种方法:

    //
    // POST: /Role/Edit/5
    [HttpPost]
    [ValidateAntiForgeryToken]
    public ActionResult Edit(IdentityRole Name)
    {
        try
        {
            context.Entry(Name).State = System.Data.Entity.EntityState.Modified;
            context.SaveChanges();

            return RedirectToAction("Index");
        }
        catch
        {
            return View();
        }
    }
但是我从来没有让它工作过,因为
Name
参数总是
null
——我仍然不知道为什么会发生这种情况,所以如果有人能向我解释一下,我将不胜感激

然后我编写了另一个方法,因为我在另一个示例中看到了
FormCollection
的使用(创建角色),它似乎工作得很好,至少它包含了我调试它时需要的信息。我的问题是,尽管
collection[“id”]
具有我试图编辑的角色的正确id,
context.Roles
完全为空。这对我来说毫无意义,因为当调用第一个方法(第一次加载视图)时

var thisRole=context.Roles.Where(r=>r.Name.Equals(Role,StringComparison.CurrentCultureIgnoreCase)).FirstOrDefault()


返回所选角色(在现有的几个角色中,我可以在添加到watch
context.Roles
时看到这些角色)。但是,加载视图后,编辑文本框并调用控制器中的第二个方法,
context.Roles
中没有任何内容。为什么?

好的,您可以使用已经内置的
[Authorize(Roles=“RoleType”)]
过滤器

然后,您就有了常规用户模型和帐户控制器,这样您就可以授权用户了。一旦您授权他们,您可以将他们设置为特定角色

例如用户故事:只有管理员才能访问操作结果x

[Authorize(User="Admin")]
Public ActionResult X(){
...
}
这样,您只需在模型创建中分配用户角色

例如

现在,只有已授权且角色类型为“Admin”的用户才能访问该控制器

如果要编辑他们的角色,可以执行一个简单的编辑用户操作方法

e、 g


现在,任何不属于“Admin”角色类型的用户都将无法访问该屏幕。他们将收到一个404错误。

我想他是在试图编辑身份文件,而不是分配或授权用户。可能是错误的。:(严重的误解(如果是这样的话)。您的编辑帖子应该绑定到IdentityRole--Edit(IdentityRole角色)…然后角色对象应该从您的视图中填充Id和名称。如果没有发生这种情况,请使用fiddler或chrome developer tools之类的工具进行检查。我认为原因是“名称”在第二个代码段中始终为空是因为它与对象中的属性名称相同。请尝试使用其他标识符,例如“roleName”而不是“name”。
[Authorize(User="Admin")]
Public ActionResult X(){
...
}
Public Class UserModel
{
int id {get;set;}
string name {get;set;}
string Role {get;set;}
.....
}
    [Post]
    public actionresult edituser(int? id)
    {
    if (id == null)
       {
     return HttpNotFound();
       }

       using (var db = new UserContext())
    {
     UserModel editUser = db.UserModel.Find(id);
     if (editUser == null)
    {
    return HttpNotFound();
    }

db.User(editModel).State = System.Data.Entity.EntityState.Modified;
db.SaveChanges();
}
RedirectToAction("Action", "Controller");
}