2017-01-16 1 views
0

Ich bin neu in Entity Framework/MVC und muss wissen, wie ein von Visual Studio automatisch generiertes Dropdown-Menü geändert wird. Ich kann mir vorstellen, dass es ziemlich einfach sein sollte, aber ich konnte es nicht herausfinden. Ich habe die Datenbank-First-Ansatz und haben die beiden folgenden Tabellen in meiner Datenbank verwendet:Ändern des Dropdown-Menüs - Automatisch generierter MVC/CRUD-Code

public partial class RestaurantRating 
    {  
     public int RestaurantRatingId { get; set; } 
     public int RestaurantRatingScore { get; set; } 
    } 

    public partial class RestaurantType 
    { 
     public int RestaurantTypeId { get; set; } 
     public string RestaurantTypeDesc { get; set; } 
    } 

ich die zusätzlichen Details entfernt, aber im Grunde einer von ihnen speichert Restaurant Bewertungen (die Bewertung ist eine ganze Zahl) und das andere man wird Restauranttypen (welche Art von Essen sie servieren) speichern. Der einzige wirkliche Unterschied zwischen den beiden ist, dass die Bewertung eine Ganzzahl ist und die Beschreibung des Typs eine Zeichenfolge ist.

Visual Studio automatisch generierten Code für die CRUD-Operationen für diese und andere Tabellen. Der HTML-Code in Create.cshtml für diese beiden Tabellen ist wie folgt:

<div class="form-group"> 
     @Html.LabelFor(model => model.RetaurantTypeId, "RetaurantTypeId", htmlAttributes: new { @class = "control-label col-md-2" }) 
     <div class="col-md-10"> 
      @Html.DropDownList("RetaurantTypeId", null, htmlAttributes: new { @class = "form-control" }) 
      @Html.ValidationMessageFor(model => model.RestaurantTypeId, "", new { @class = "text-danger" }) 
     </div> 
    </div> 
    <div class="form-group"> 
     @Html.LabelFor(model => model.RestaurantRatingId, "RestaurantRatingId", htmlAttributes: new { @class = "control-label col-md-2" }) 
     <div class="col-md-10"> 
      @Html.DropDownList("RestaurantRatingId", null, htmlAttributes: new { @class = "form-control" }) 
      @Html.ValidationMessageFor(model => model.Id, "", new { @class = "text-danger" }) 
     </div> 
    </div> 

Und die ViewBag Informationen für diese beiden Tabellen im Aktions Ergebnis im Controller erstellen ist die folgende:

ViewBag.RestaurantRatingId = new SelectList(db.RestaurantRating, "RestaurantRatingId", "RestaurantRatingId"); 
ViewBag.RestaurantTypeId = new SelectList(db.RestaurantType, "RestaurantTypeId", "RestaurantTypeDesc"); 

Die Probleme und erwartete Ergebnisse sind die folgenden:

  • Das Dropdown-Menü für RestaurantType funktioniert wie erwartet. Es lädt einfach die verschiedenen Typen in ein Dropdown-Menü und ermöglicht dem Benutzer, einen von ihnen auszuwählen. Das RestaurantRating lädt jedoch die RatingId statt der Beschreibungen, was ich brauche. Ich habe versucht, die Viewbag ohne Erfolg zu ändern.

  • Der HTML-Code wählt automatisch den ersten Wert für die Dropdown-Menüs, aber es ist möglich, NULL-Werte für diese Felder in der Datenbank zu speichern. Wie kann ich einen leeren Standardwert für die obigen Dropdown-Menüs hinzufügen, sodass, wenn der Benutzer den leeren Wert auswählt (oder das Dropdown-Menü nicht berührt), ein NULL-Wert an die Datenbank gesendet wird?

Jede Hilfe wird sehr geschätzt. Ich werde glücklich sein, jeden zusätzlichen Code/Information zur Verfügung zu stellen. Ich danke dir sehr!

+1

Wird dieser ViewBag-Code automatisch generiert? Was passiert, wenn Sie 'ViewBag.RestaurantRatingId = neue SelectList (db.RestaurantRating," RestaurantRatingId "," RestaurantRatingScore ") verwenden;'? – Adam

+0

Ja, der ViewBag-Code wird automatisch generiert. Ich habe den Code zu dem geändert, was Sie erwähnt haben, und es funktioniert jetzt gut. Vielen Dank! Könnten Sie mir mitteilen, wie Sie dem obigen Dropdown-Code einen zusätzlichen leeren Wert (Standardwert) hinzufügen können, damit, wenn der Benutzer das Dropdown-Menü nicht berührt und das Formular abschickt, ein Nullwert zurück an die Datenbank gesendet wird? – Irina

+0

Sie könnten versuchen @mohammed Antwort unten. Eine andere Alternative ist das Hinzufügen des leeren Wertes zu Ihrem RestaurantRate/Type in der Datenbank, etwa "Blank" oder "Not selected". Auf diese Weise stimmt der Wert mit dem überein, was Sie in der Datenbank haben. Ich mache es lieber so, wenn es möglich ist, denn das macht den Kolder sauberer. (F: Wenn der Code automatisch generiert wird, wird er nicht jedes Mal erneut unterbrochen, wenn Sie regenerieren?) – Adam

Antwort

1

Sie brauchen nur eine Option Label der Dropdown-Liste wie folgt hinzuzufügen: -

@Html.DropDownList("RetaurantTypeId", null,"optionLable goes Here", htmlAttributes: new { @class = "form-control" }) 

und stellen Sie sicher, auf der anderen Seite, dass Sie es zu einem Nullable-Modelleigenschaft binden so das Modell Bindemittel in der Lage sein wird, Festlegen des Modelleigenschaftswerts auf Null hoffe diese antwort deine frage.

+0

Das war alles was ich brauchte. Ich danke dir sehr! – Irina

+0

Sie sind jederzeit willkommen. –

Verwandte Themen