DropDownList in MVC 4 mit Razor


142

Ich versuche DropDownListeine Rasiermesseransicht zu erstellen .

Würde mir jemand dabei helfen?

Normaler HTML5-Code:

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

Ich habe es versucht:

@{
    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 --"
)

7
Sie var listItems = ...sollten sich in Ihrem Controller befinden, nicht in Ihrer Ansicht.
Liam

1
Dies ist MVC3, aber es ist die gleiche Syntax wie MVC4: stackoverflow.com/questions/5070762/…
Liam

2
@ Liam: Es gehört wahrscheinlich in das Ansichtsmodell, nicht in den Controller. Der Controller sollte keine Abhängigkeit haben, ListItemda es sich um ein UI-gebundenes Konzept handelt. Es sollte nicht einmal wirklich im Ansichtsmodell sein, sondern nur in der Ansicht. Der Controller sollte das Ansichtsmodell erstellen, das Ansichtsmodell sollte die Daten enthalten, die Ansicht sollte UI-Elemente (wie ListItem) zu diesen Daten erstellen.
David

2
Welchen Wert hat die Verwendung von Razor gegenüber nativem HTML? Ist es Leistung oder Funktionalität? Da werden keine Daten vom Controller abgerufen.
Barry MSIH

1
Bitte sagen Sie mir, was die Eigenschaft model.tipo im allgemeinen Sinne darstellt.

Antworten:


249
@{
   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 --")

2
Wenn Sie die Liste im Controller definiert haben, müssen Sie sie in der Ansicht wie folgt umwandeln: @ Html.DropDownListFor (model => model.model_year, ViewBag.Years as List <SelectListItem>, "- Select Year -")
Bashar Abu Shamaa

4
In der letzten Zeile - Woher wissen Sie, welches Modell Sie aufrufen sollen? Woher kommt "tipo"?
Andre

2
@Andre Es ist der Name der Modelleigenschaft. Er las es aus der Frage. Der Wert wird an dieses Feld gebunden.
Hrvoje T

Sie müssen vorsichtig sein, da keine der veröffentlichten Lösungen eine serverseitige Validierung durchführt. Hier ist eine elegante Lösung, die sowohl clientseitige als auch serverseitige Validierungen durchführt, um sicherzustellen, dass gültige Daten an das Modell gesendet werden. stackoverflow.com/a/56185910/3960200
Etienne Charland

72
@{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"))

Damit dieses Beispiel funktioniert, habe ich dies über diesem Codesegment hinzugefügt. @ using System.Web.UI.WebControls;
Badar

42

Sie können dies verwenden:

@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"}
    })  

1
Was ist "Tipo"?
Andre

1
@ Andrew. Eigenschaft Tipo am Modell. Schau dir den ersten Beitrag an.
Gabriel Simas

1
danke, ich habe immer noch keine Ahnung, woher er das hat
Andre

22

// ViewModel

public class RegisterViewModel
{

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

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

    public string StudentGrade { get; set; }

  }

// Aufzählungsklasse:

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

// Controller-Aktion

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

// Aktion anzeigen

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

11

Hier ist die einfachste Antwort:

aus Ihrer Sicht nur hinzufügen:

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

ODER fügen Sie in Ihrem Controller Folgendes hinzu:

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

und Ihre Ansicht fügen Sie einfach hinzu:

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

Das habe ich bei Jess Chadwick gelernt


8

Glauben Sie mir, ich habe viele Möglichkeiten ausprobiert, und ich habe hier eine Antwort

Aber ich suche immer nach den besten Praktiken und der beste Weg, den ich bisher sowohl für Front-End- als auch für Back-End-Entwickler kenne, ist for loop(ja, ich mache keine Witze).

Denn wenn das Front-End Ihnen die UI-Seiten mit Dummy-Daten zur Verfügung stellt, hat er auch Klassen und einige Inline-Stile für bestimmte Auswahloptionen hinzugefügt, damit diese hard to dealverwendet werden könnenHtmlHelper

Schauen Sie sich das an:

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

Dies vom Front-End-Entwickler, daher ist die beste Lösung die Verwendung der for-Schleife

fristly createoder get your listvon Daten aus (...) in der Controller-Aktion und legen Sie sie in ViewModel, ViewBag oder was auch immer

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

Zweitens machen Sie in der Ansicht diese einfache for-Schleife, um die Dropdown-Liste zu füllen

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

Auf diese Weise brechen Sie das UI-Design nicht und es ist einfach, leicht und besser lesbar

Ich hoffe, dies hilft Ihnen, auch wenn Sie kein Rasiermesser verwendet haben


7

Die Verwendung eines Arrays wäre etwas effizienter als das Erstellen einer 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"}})

6
@{
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"))

Siehe: - Erstellen Sie eine Dropdown-Liste im MVC 4-Rasiererbeispiel


4

benutze einfach This

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();
}

und in Ansicht verwenden Sie Folgendes.

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

Wenn Sie Daten aus dem Datensatz abrufen und diese Daten in ein Listenfeld einfügen möchten, verwenden Sie den folgenden Code.

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();

und in der Ansicht schreiben Sie folgenden Code.

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

3

Wenn Sie ASP.net 5 (MVC 6) oder höher verwenden, können Sie die neuen Tag-Helfer für eine sehr schöne Syntax verwenden:

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

Können Sie ein Beispiel geben, in dem die Elemente dynamisch sind? Für eine statische Liste macht es keinen Sinn, Tag-Helfer zu verwenden. Und treffen Sie eine der ausgewählten Optionen.
user3285954

Der Punkt ist, dass es datengebunden ist. Es wählt automatisch die Option aus, auf die die Variable festgelegt ist, und legt die Variable fest, wenn das Formular gesendet wird. Um die Gegenstände dynamisch zu machen, machen Sie einfach einen Rasierer foreach.
Bryan Legend

1

Dies kann auch so gemacht werden

@model IEnumerable<ItemList>

<select id="dropdowntipo">
    <option value="0">Select Item</option>
    
    @{
      foreach(var item in Model)
      {
        <option value= "@item.Value">@item.DisplayText</option>
      }
    }

</select>


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

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.