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()代码>
返回所选角色(在现有的几个角色中,我可以在添加到watchcontext.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");
}