【发布时间】:2016-06-21 20:25:45
【问题描述】:
在我的应用程序中,我想让用户能够将其他用户添加到单个角色。
因此我的模型包含一个IDictionary<string, IEnumerable<string>>,其中键是角色的名称,值是将设置为给定角色的用户名列表。
但是,我正在努力解决如何发布此内容(或事件如何在我的表单中创建隐藏字段),以便我可以在我的操作中访问字典。
This article 似乎解决了一个相关问题,但我没有设法发布正确的数据。
目前我的代码如下所示:
foreach (var roleToUserRelation in Model.RoleUserRelations)
{
@Html.Hidden(Html.NameFor(m => m.RoleUserRelations) + ".Index", s)
@Html.HiddenFor(m => m.RoleUserRelations[s]);
// loop through each user
foreach (var userName in roleToUserRelation.Value)
{
// get the list somehow rendered to be posted as value for the dictionary
@Html.Hidden(m => userName)
}
}
是否可以这样做,或者我应该重新考虑模型结构以避免在这里使用字典?
【问题讨论】:
-
您不能使用
foreach循环为集合生成表单控件(请参阅this answer),并且在视图中使用字典是最糟糕的类型。只需使用带有IList<string>属性的视图模型 -
但是既然你只显示了隐藏的输入,那么这有什么意义呢?
-
这些值是通过
Javascript设置的,所以隐藏字段对于这种情况来说已经足够了,它更多的是关于如何命名以使模型绑定器根据需要工作 -
@StephenMuecke 如何使用
IList<string>帮助?我怎么知道列表属于哪里(属于哪个角色)?甚至角色也是某种动态的,因此每个角色的列表都是不可行的。 -
使用视图模型来表示您想要显示和编辑的内容。从您发布的内容中无法判断,但最好的猜测是您希望它具有属性
string Role和List<string> Users,然后视图将是@model List<yourModel>。但是,如果您希望用户编辑某些内容,则使用隐藏输入毫无意义
标签: c# asp.net-mvc asp.net-mvc-4 dictionary model-binding