【问题标题】:c# MVC: How to update user roles?c# MVC:如何更新用户角色?
【发布时间】:2013-06-06 07:09:57
【问题描述】:

我有一个视图模型,它公开了一些 公共虚拟 ICollection 角色 { 获取;放; }

这对于恢复用户所属的角色非常有用。但是如何从表单更新用户的角色。

为了测试,我尝试添加一个名为“角色”的隐藏字段并输入“管理员”和它的 GUID,因为它是发送回服务器的值:

<input type="hidden" name="Roles" value="Admin" />
<input type="hidden" name="Roles" value="7feab829-b86c-4a94-90bf-f35e9ce04b01" />

但是,当传递到服务器时,我可以看到这种方式会创建无效的模型状态——任何建议将不胜感激!

【问题讨论】:

  • 为什么要从表单中更新他们的角色?如果你想更新角色,你应该通过一个完整的单独的(和经过身份验证的)控制器操作来完成,而不是从客户端返回。记住,永远不要相信客户。
  • 我正在创建控制器来更新用户(名称/密码/等)。我认为这也是更新角色的好地方。这一切都会被验证。
  • 我可以理解允许用户更新他们的姓名和密码,但您是否也希望他们能够更新他们的角色?我只是想确保我理解你的意图。另外,您使用的是默认的会员服务提供商吗?
  • 这不适合最终用户 - 这是一个单独的管理部分,用于更新系统用户:) 我明白你为什么在不理解的情况下担心:)
  • 明白了。在这种情况下,您可以发布您的控制器吗?我怀疑您需要一个可用角色的下拉列表,以及您的帖子模型上具有下拉列表角色选择的内容。

标签: c# asp.net-mvc user-roles


【解决方案1】:

根据您的 cmets,我看到了一些简单的解决方案。首先,删除隐藏的输入字段。那些不会给你买任何东西,只会在你去验证模型时伤害你

  1. 使用角色下拉列表并将其传递回您的模型。值应该是选择。
  2. 如您所述,将它们作为字符串传递并在控制器中解析
  3. 使用径向选项,每个选项都有一个唯一的 ID。传递 ID 并将该 ID 对应到控制器中的值。

在控制器中,您是绝对正确的。获取角色并调用 Roles.AddUserToRole()。

我认为你已经走在正确的轨道上:)。

【讨论】:

  • 我的问题是我正在使用视图模型返回用户,其中包括:public virtual ICollection Roles { get;放;回传一串角色对这个模型无效,对吗?
  • 嗯,如果您只是要将它们发送回去,为什么还要发送它们呢?然后你应该考虑做一个复选框系统来发送 List 或 List 或其他一些列表,或者只允许每次调用添加/删除一个角色,或者将角色完全移出
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-07-29
  • 1970-01-01
  • 1970-01-01
  • 2018-11-04
  • 2016-02-11
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多