2017-10-02 1 views
-3

Ich habe eine Tabelle in meiner SQL-Datenbank und mit MVC auf einem ASP.NET Kern:Wie aus einer SQL-Tabelle in C# eine Dropdown-Liste füllen

CREATE TABLE [dbo].[ProgramVersion] (
    [ID]  INT   IDENTITY (1, 1) NOT NULL, 
    [Ver]  VARCHAR (10) NOT NULL, 
    [Released] DATETIME  NOT NULL 
); 

Sehr einfach. Ich habe eine gerüstete Edit.cshtml-Datei, hat ein Formular zum Bearbeiten von Datensätzen aus einer anderen Tabelle. Ich möchte nur die Datensätze in der ProgramVersion-Tabelle verwenden, um eine HTML-Auswahleingabe (d. H. Dropdown-Liste) zu füllen.

  1. Wie führe ich eine einfache Abfrage aus, die mir eine Ergebnismenge gibt?
  2. Wie durchlaufe ich die Ergebnismenge und gebe einfach den 'Ver' String-Wert in die Options-Tags in der Dropdown-Liste ein?

(In PHP ist dies einfach tot, aber C# ist wirklich frustrierend ich.)

+1

'IEnumerable Optionen = db.ProgramVersion.Select (x => new SelectListItem {Wert = x.ID.ToString(), Text = x. Ver}); ' –

+0

Verwenden Sie Entity Framework? – SEarle1986

+0

Ja, mit Entity Framework. das sieht nach einem guten Anfang aus, Stephen Mücke, aber wie lautet die Razor-Syntax, um es in das HTML-Formular zu bekommen? –

Antwort

1

Zuerst Sie eine Ansicht Modell erstellen, die Daten zwischen Ihrer Aktionsmethode und Ansicht übertragen kann. In 2 Eigenschaften dazu eine für die Liste der Optionen vorbei benötigt und eine zum Halten des ausgewählten Optionswert

public class CreateVm 
{ 
    public List<SelectListItem> Items { set;get;} 
    public int SelectedItemId { set;get;} 
} 

Jetzt in Ihrem GET Aktion, erstellen Sie ein Objekt dieser, laden Sie die Objekte Eigenschaften und geben es an die Ansicht

public ActionResult Create() 
{ 
    var vm = new CreateVm(); 

    //Load the Items property by reading the ProgramVersion table data 
    vm.Items = db.ProgramVersions 
       .Select(x=>new SelectListItem { Value=x.Id.ToString(), 
               Text=x.Ver}) 
       .ToList(); 
    return View(vm); 
} 

nun Ihrer Meinung nach, die stark zu dieser Ansicht Modell eingegeben wird, können Sie die DropDownListFor hepler Methode

@model CreateVm 
@using(Html.BeginForm()) 
{ 
    @Html.DropDownListFor(s=>s.SelectedItemId,Model.Items,"Select one") 
    <input type="submit" /> 
} 

verwenden Sie die verwenden können, gleiche Ansicht Modell in der Httppost Aktion-Methode als Parameter

[HttpPost] 
public ActionResult Create(CreatVm model) 
{ 
    // check model.SelectedItemId 
    // to do : return something 
} 
+0

Ich bin sicher, das ist eine großartige Antwort, und eine Möglichkeit, es zu tun, aber nicht wirklich, was ich fragte, @Shyju. Ich möchte die Ergebnismenge von einer Abfrage, so dass ich es durchlaufen kann und manuell "Ver" -Feld aus jeder Zeile in HTML-OPTION-Tags setzen. –

+0

dass linq Ausdruck eine Abfrage hinter der Szene ausführen wird. Wollen Sie damit sagen, dass Sie das nicht verwenden möchten und eine SQL-Abfrage mit SqlDataReader ausführen und das Ergebnis daraus verwenden möchten? – Shyju

Verwandte Themen