Возможно, это уже поздно, но вы можете использовать специальное связующее для достижения этой цели. Обычно я делал бы это так же, как @tvanofosson, но у меня был случай, когда я добавлял UserDetails в таблицы AspNetMembershipProvider. Поскольку я также использую только POCO (и отображаю его из EntityFramework), я не хотел использовать идентификатор, потому что он не был оправдан с точки зрения бизнеса, поэтому я создал модель только для добавления / регистрации пользователей. Эта модель имеет все свойства для пользователя, а также свойство Role. Я хотел связать текстовое имя роли с ее представлением RoleModel. Вот в основном то, что я сделал:
public class RoleModelBinder : DefaultModelBinder
{
public override object BindModel(ControllerContext controllerContext, ModelBindingContext bindingContext)
{
string roleName = controllerContext.HttpContext.Request["Role"];
var model = new RoleModel
{
RoleName = roleName
};
return model;
}
}
Затем мне пришлось добавить следующее в Global.asax:
ModelBinders.Binders.Add(typeof(RoleModel), new RoleModelBinder());
И использование в представлении:
<%= Html.DropDownListFor(model => model.Role, new SelectList(Model.Roles, "RoleName", "RoleName", Model.Role))%>
Надеюсь, это поможет вам.