Создание списка со строго типизированным представлением? - PullRequest
0 голосов
/ 31 августа 2009

Я пытаюсь «преобразовать» это в строго типизированную модель вместо ViewData. Но как это должно выглядеть?

Я получил это в моем контроллере:

    public ActionResult UserEdit(int? userID)
    {
        User u;

        if (userID == null)
        {
            u = new User();
        }
        else
        {
            u = _us.GetUsers(userID.Value).First();
            u.Usergroups.Load();
        }

        List<int> selectedUsergroupIDs = new List<int>();

        foreach (Usergroup item in u.Usergroups)
        {
            selectedUsergroupIDs.Add(item.UsergroupID);
        }

        MultiSelectList UsergroupID = new MultiSelectList(_ug.GetUsergroups(), "UsergroupID", "UsergroupName", selectedUsergroupIDs);

        ViewData["UsergroupID"] = UsergroupID;


        return View("UserEdit", new UserAdminEditViewModel { User = u, Usergroups = _ug.GetUsergroups() });
    }

«UsergroupID» в этом случае, что необходимо добавить в мою модель и на мой взгляд?

Заранее спасибо

/ М

1 Ответ

1 голос
/ 31 августа 2009

Не уверен, что я понимаю весь вопрос, но если вы спрашиваете, что вы можете сделать, чтобы сделать эту модель пригодной для использования на странице, убедитесь, что страница наследуется от 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 () дважды. Это решение должно закончиться, но если вам все еще нужно ссылаться на него, я бы рекомендовал кэшировать его в действии, если вы не кэшируете его в самом вызове метода, чтобы не попадать в базу данных каждый раз, когда вам нужен список .

Я думаю, что это отвечает на ваш вопрос. Если нет, пожалуйста, уточните. Кроме того, я не тестировал этот код, поэтому он не гарантированно компилируется, но он должен работать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...