Как отобразить один объект со списком - PullRequest
0 голосов
/ 02 марта 2012

Во-первых, извините за мой плохой английский:).

Мой объект имеет одну переменную типа String и один selectListItem, которые выполняют разные роли. Я хотел бы отобразить имя пользователя и для каждого имени пользователя их роли в выпадающем списке ...

Мой класс Модель: Пользователь:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.ComponentModel.DataAnnotations;
using System.Web.Mvc;

namespace ASP.Models.User
{
    public class User
    {
        [Required(ErrorMessage = "User required")]
        [Display(Name = "Username")]
        public String Username { get; set; }

        [Display(Name = "Roles")]
        public IList<SelectListItem> roles = new List<SelectListItem>();
        public IList<SelectListItem> Roles
        {
            get { return roles; }
            set { roles = value; }
        }
    }
}

Когда люди подключатся на странице, я восстановлю в базе данных имена пользователей и роли, после того как я поместил роли в один список. Контроллер:

public ActionResult Modify()
        {
            Connection connection = new Connection();
            connection.creationConnexion();
            DbDataReader reader = connection.getBDAllPseudoRole();
            List<User> users=new List<User>();
            User user = null; ;
            if (reader.HasRows)
            {
                while (reader.Read())
                {
                    Boolean flag = false;
                    foreach (User userTemp in users)
                    {
                        if (userTemp.UserName.Equals(Convert.ToString(reader[0])))
                        {
                            user = userTemp;
                            flag = true;
                        }
                    }
                    if(flag==false)    
                        user = new user();

                    if (reader.GetValue(1) == DBNull.Value)//if first row equals null; we dont have the roles
                    {
                        user.UserName = Convert.ToString(reader[0]);

                    }
                    else
                    {
                        user.Username =  Convert.ToString(reader[0]);
                        SelectListItem item = new SelectListItem();
                        item.Text = Convert.ToString(reader[1]);
                        item.Value = Convert.ToString(reader[1]);
                        user.Roles.Add(item);
                    }
                    user.Add(user);
                }
    }
return View(users);
    }

Мой взгляд:

@model ASP.Models.User
@{
    ViewBag.Title = "Modify";
}

<h2>Modify</h2>

@using (Html.BeginForm())
{
    @Html.ValidationSummary(true)
    <fieldset>
        <legend>User</legend>

        <div class="editor-label">
            @Html.LabelFor(user => user.UserName)
        </div>
        <div class="editor-field">
            @Html.EditorFor(user => user.UserName)
            @Html.ValidationMessageFor(user => user.UserName)
        </div>

        <div class="editor-label">
            @Html.DropDownList("roles", utilisateur => utilisateur.Roles)
        </div>

         <input type="submit" value="Connexion"/>

    </fieldset>
}

У меня есть одна ошибка для отображения в раскрывающемся списке, и я не могу найти решение.

* +1015 * Спасибо, Zoners

1 Ответ

1 голос
/ 02 марта 2012

попробуйте

@Html.DropDownList("roles", Model.Roles)

Вы также можете добавить еще одно строковое свойство к вашей модели представления с именем Role

public string Role{ get; set; } и используйте строго типизированный DropDownList, как показано ниже

@Html.DropDownListFor(model=>model.Role, Model.Roles)

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