2013-07-18 1 views
104

J'essaye de créer un DropDownList sur une vue de rasoir.DropDownList dans MVC 4 avec Razor

Quelqu'un pourrait m'aider avec cela?

normal Code HTML5:

<select id="dropdowntipo"> 
    <option value="Exemplo1">Exemplo1</option> 
    <option value="Exemplo2">Exemplo2</option> 
    <option value="Exemplo3">Exemplo3</option> 
</select> 

J'ai essayé ceci:

@{ 
    var listItems = new List<ListItem> { 
     new ListItem { Text = "Exemplo1", Value = "Exemplo1" }, 
     new ListItem { Text = "Exemplo2", Value = "Exemplo2" }, 
     new ListItem { Text = "Exemplo3", Value = "Exemplo3" } 
    }; 
} 

@Html.DropDownListFor(model => 
    model.tipo, 
    new SelectList(listItems), 
    "-- Select Status --" 
) 
+5

votre 'var listItems = ...' doit être dans votre contrôleur pas votre vue . – Liam

+1

c'est MVC3 mais c'est la même syntaxe que MVC4: http://stackoverflow.com/questions/5070762/mvc3-razor-html-dropdownlistfor – Liam

+2

@Liam: Il appartient probablement au modèle de vue, pas au contrôleur. Le contrôleur ne devrait pas avoir de dépendance sur 'ListItem' car c'est un concept lié à l'interface utilisateur. Il ne devrait même pas _really_ être dans le modèle de vue, juste dans la vue. Le contrôleur doit construire le modèle de vue, le modèle de vue doit contenir les données, la vue doit construire des éléments d'interface utilisateur (comme 'ListItem') avec ces données. – David

Répondre

192
@{ 
    List<SelectListItem> listItems= new List<SelectListItem>(); 
    listItems.Add(new SelectListItem 
     { 
      Text = "Exemplo1", 
      Value = "Exemplo1" 
     }); 
    listItems.Add(new SelectListItem 
     { 
      Text = "Exemplo2", 
      Value = "Exemplo2", 
      Selected = true 
     }); 
    listItems.Add(new SelectListItem 
     { 
      Text = "Exemplo3", 
      Value = "Exemplo3" 
     }); 
} 

@Html.DropDownListFor(model => model.tipo, listItems, "-- Select Status --") 
+3

fonctionne très bien!, Merci beaucoup – user2232273

+2

Vous êtes les bienvenus. – chridam

+2

Si vous avez défini la liste dans le contrôleur, alors vous avez besoin de l'afficher pour le lancer, comme ceci: @ Html.DropDownListFor (model => model.model_year, ViewBag.Years as List , "- Sélectionnez l'année -") –

61
@{var listItems = new List<ListItem> 
    { 
      new ListItem { Text = "Exemplo1", Value="Exemplo1" }, 
      new ListItem { Text = "Exemplo2", Value="Exemplo2" }, 
      new ListItem { Text = "Exemplo3", Value="Exemplo3" } 
    }; 
    } 
     @Html.DropDownList("Exemplo",new SelectList(listItems,"Value","Text")) 
+0

Cela a fonctionné parfaitement pour moi – BrianLegg

+0

Pour que cet exemple fonctionne je l'ai ajouté en utilisant au-dessus de ce segment de code. @using System.Web.UI.WebControls; – Badar

+0

Cela ne fonctionne pas pour moi. – Andre

31

Vous pouvez utiliser ceci:

@Html.DropDownListFor(x => x.Tipo, new List<SelectListItem> 
    { 
         new SelectListItem() {Text = "Exemplo1", Value="Exemplo1"}, 
         new SelectListItem() {Text = "Exemplo2", Value="Exemplo2"}, 
         new SelectListItem() {Text = "Exemplo3", Value="Exemplo3"} 
    }) 
+0

Qu'est-ce que c'est «tipo»? – Andre

+0

@Andre. Propriété Tipo sur le modèle. Regardez le premier message. –

+0

merci, je n'ai toujours aucune idée d'où il a obtenu cela de si – Andre

5

L'utilisation d'un tableau serait un peu plus efficace que la création d'une liste.

@Html.DropDownListFor(x => x.Tipo, new SelectListItem[]{ 
       new SelectListItem() {Text = "Exemplo1", Value="Exemplo1"}, 
       new SelectListItem() {Text = "Exemplo2", Value="Exemplo2"}, 
       new SelectListItem() {Text = "Exemplo3", Value="Exemplo3"}}) 
2

Si vous utilisez ASP.net 5 (MVC 6) ou version ultérieure, vous pouvez utiliser la new Tag Helpers pour une syntaxe très agréable:

<select asp-for="tipo"> 
    <option value="Exemplo1">Exemplo1</option> 
    <option value="Exemplo2">Exemplo2</option> 
    <option value="Exemplo3">Exemplo3</option> 
</select> 
+0

Pouvez-vous donner un exemple où les éléments sont dynamiques? Pour une liste statique, aucun point d'utilisation des aides à la balise. Et faites l'une des options sélectionnées. – user3285954

+0

Le point est que c'est lié aux données. Il sélectionne automatiquement l'option à laquelle la variable est définie et définit la variable lors de la soumission du formulaire. Pour rendre les éléments dynamiques, il suffit de faire un rasoir foreach. –

5
@{ 
List<SelectListItem> listItems= new List<SelectListItem>(); 
listItems.Add(new SelectListItem 
    { 
     Text = "One", 
     Value = "1" 
    }); 
listItems.Add(new SelectListItem 
    { 
     Text = "Two", 
     Value = "2", 
    }); 
listItems.Add(new SelectListItem 
    { 
     Text = "Three", 
     Value = "3" 
    }); 
listItems.Add(new SelectListItem 
{ 
    Text = "Four", 
    Value = "4" 
}); 
listItems.Add(new SelectListItem 
{ 
    Text = "Five", 
    Value = "5" 
}); 
} 
@Html.DropDownList("DDlDemo",new SelectList(listItems,"Value","Text")) 

Reportez-vous: - Create drop down list in MVC 4 razor example

17

// ViewModel

public class RegisterViewModel 
{ 

    public RegisterViewModel() 
    { 
     ActionsList = new List<SelectListItem>(); 
    } 

    public IEnumerable<SelectListItem> ActionsList { get; set; } 

    public string StudentGrade { get; set; } 

    } 

// Enum Classe:

public enum GradeTypes 
{ 
    A, 
    B, 
    C, 
    D, 
    E, 
    F, 
    G, 
    H 
} 

// Action Controller

public ActionResult Student() 
    { 
RegisterViewModel vm = new RegisterViewModel(); 
IEnumerable<GradeTypes> actionTypes = Enum.GetValues(typeof(GradeTypes)) 
              .Cast<GradeTypes>(); 
     vm.ActionsList = from action in actionTypes 
         select new SelectListItem 
         { 
          Text = action.ToString(), 
          Value = action.ToString() 
         }; 
     return View(vm); 
    } 

// vue d'action

<div class="form-group"> 
           <label class="col-lg-2 control-label" for="hobies">Student Grade:</label> 
           <div class="col-lg-10"> 
            @Html.DropDownListFor(model => model.StudentGrade, Model.ActionsList, new { @class = "form-control" }) 
           </div> 
8

Voici la réponse la plus facile:

dans votre vue seulement de ajouter:

@Html.DropDownListFor(model => model.tipo, new SelectList(new[]{"Exemplo1", 
"Exemplo2", "Exemplo3"})) 

OU dans votre contrôleur ajouter:

var exemploList= new SelectList(new[] { "Exemplo1:", "Exemplo2", "Exemplo3" }); 
     ViewBag.ExemploList = exemploList; 

et votre point de vue simplement ajouter:

@Html.DropDownListFor(model => model.tipo, (SelectList)ViewBag.ExemploList) 

Je l'ai appris avec Jess Chadwick

3

utilisent juste cette

public ActionResult LoadCountries() 
{ 
    List<SelectListItem> li = new List<SelectListItem>(); 
    li.Add(new SelectListItem { Text = "Select", Value = "0" }); 
    li.Add(new SelectListItem { Text = "India", Value = "1" }); 
    li.Add(new SelectListItem { Text = "Srilanka", Value = "2" }); 
    li.Add(new SelectListItem { Text = "China", Value = "3" }); 
    li.Add(new SelectListItem { Text = "Austrila", Value = "4" }); 
    li.Add(new SelectListItem { Text = "USA", Value = "5" }); 
    li.Add(new SelectListItem { Text = "UK", Value = "6" }); 
    ViewData["country"] = li; 
    return View(); 
} 

et dans l'utilisation de View suivant.

@Html.DropDownList("Country", ViewData["country"] as List<SelectListItem>) 

Si vous souhaitez obtenir des données de Dataset et remplir ces données dans une zone de liste, utilisez le code suivant.

List<SelectListItem> li= new List<SelectListItem>(); 
for (int rows = 0; rows <= ds.Tables[0].Rows.Count - 1; rows++) 
{ 
    li.Add(new SelectListItem { Text = ds.Tables[0].Rows[rows][1].ToString(), Value = ds.Tables[0].Rows[rows][0].ToString() }); 
} 
ViewData["FeedBack"] = li; 
return View(); 

et en vue d'écrire le code suivant.

@Html.DropDownList("FeedBack", ViewData["FeedBack"] as List<SelectListItem>) 
0

List<tblstatu> status = new List<tblstatu>(); 
 
      status = psobj.getstatus(); 
 
      model.statuslist = status; 
 
      model.statusid = status.Select(x => new SelectListItem 
 
      { 
 
       Value = x.StatusId.ToString(), 
 
       Text = x.StatusName 
 
      }); 
 

 

 
    @Html.DropDownListFor(m => m.status_id, Model.statusid, "Select", new { @class = "form-control input-xlarge required", @type = "text", @autocomplete = "off" })

4

Croyez-moi j'ai essayé beaucoup d'options pour faire and I have answer here

mais je cherche toujours les meilleures pratiques

et la meilleure façon savoir jusqu'à présent pour les développeurs frontend et backend est for loop (oui, je ne plaisante pas)

parce que quand le front-end vous donne l'interface utilisateur Pages avec des données factices, il a également ajouté des classes et des styles en ligne sur l'option de sélection spécifique de sorte que son hard to deal avec qu'utiliser HtmlHelper

look prendre à ce

<select class="input-lg" style=""> 
    <option value="0" style="color:#ccc !important;"> Please select the membership name to be searched for </option> 
    <option value="1">11</option> 
    <option value="2">22</option> 
    <option value="3">33</option> 
    <option value="4">44</option> 
</select> 

ce à partir du développeur frontal donc meilleure solution est d'utiliser la boucle for

fristly create ou get your list de données fr om (...) dans l'action du contrôleur et le mettre dans ViewModel, ViewBag ou tout

ViewBag.MembershipList = await _membershipAppService.GetAllMemberships();// this returns object that contain Items and TotolCount 

En second lieu dans la vue simple pour faire cette boucle pour remplir le dropdownlist

<select class="input-lg" name="PrerequisiteMembershipId" id="PrerequisiteMembershipId"> 
    <option value="" style="color:#ccc !important;"> Please select the membership name to be searched for </option> 
    @foreach (var item in ViewBag.MembershipList.Items) 
    { 
     <option value="@item.Id" @(Model.PrerequisiteMembershipId == item.Id ? "selected" : "")>@item.Name</option> 
    } 
</select> 

de cette façon vous ne cassera pas d'interfaces utilisateur, et son simple, facile et plus lisible

espérons que cette aide vous, même si vous ne l'avez pas utilisé rasoir