2012-03-02 4 views
0

Во-первых, им жаль, что у меня плохой английский :).Как отобразить один объект со списком

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

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

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> 
} 

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

Спасибо, Zoners

+0

На мой взгляд: @model IEnumerable и @ Html.DropDownList ("role", utilisateur.Roles). Большое спасибо за Вашу помощь – Zoners

ответ

1

попробовать это

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

Можно также добавить еще одну строку свойство вашей ViewModel под названием Роль

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

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

Смежные вопросы