Не уверен, что я понимаю весь вопрос, но если вы спрашиваете, что вы можете сделать, чтобы сделать эту модель пригодной для использования на странице, убедитесь, что страница наследуется от ViewPage<UserAdminEditViewModel>
.
Кроме того, класс MultiSelectList имеет как выбранные, так и невыбранные значения, поэтому вам не нужно иметь их оба в модели представления, чтобы можно было соединить их до одного члена модели. Вам нужно изменить UserAdminEditViewModel
, чтобы выглядеть примерно так.
public class UserAdminEditViewModel
{
public User User { get; set; }
public IEnumerable<SelectListItem> UserGroups { get; set; }
}
В конце вашего контроллера:
userGroups = new MultiSelectList(_ug.userGroups(), "Id", "Name", (from g in User.Usergroups select g.Id.Value).ToList()), new { size = 6 })
return View("UserEdit", new UserAdminEditViewModel { User = u, UserGroups = userGroups });
Затем, на вашей странице просмотра:
<%@ Page Title="User Admin Edit" Language="C#" MasterPageFile="~/Views/Shared/Site.Master" Inherits="System.Web.Mvc.ViewPage<UserAdminEditViewModel>" %>
<%-- ... --%>
<% using (Html.BeginForm()) {%>
<div>
<label for="Title">User name:</label>
<%= Html.TextBox("Title", Model.User.Username) %>
</div>
<div>
<label for="Groups">Groups:</label>
<%= Html.ListBox("SelectedGroups", Model.UserGroups)%>
</div>
<%-- ... --%>
<% } %>
<%-- ... --%>
Также обратите внимание, что вы вызываете _ug.GetUsergroups () дважды. Это решение должно закончиться, но если вам все еще нужно ссылаться на него, я бы рекомендовал кэшировать его в действии, если вы не кэшируете его в самом вызове метода, чтобы не попадать в базу данных каждый раз, когда вам нужен список .
Я думаю, что это отвечает на ваш вопрос. Если нет, пожалуйста, уточните. Кроме того, я не тестировал этот код, поэтому он не гарантированно компилируется, но он должен работать.