web-dev-qa-db-de.com

Html.DropdownListFür ausgewählten Wert wird nicht festgelegt

Wie kann ich den ausgewählten Wert einer Html.DropDownListFor einstellen? Ich habe online nachgesehen und gesehen, dass dies durch Verwendung des vierten Parameters wie dem folgenden erreicht werden kann:

@Html.DropDownListFor(m => m, new SelectList(Model, "Code", "Name", 0),  "Please select a country")

Meine Auswahlliste wird dann wie folgt angezeigt:

<select id="ShipFromCountries" name="ShipFromCountries">
     <option value="">Please select a country</option>
     <option value="GB">United Kingdom</option>
     <option value="US">United States</option>
     ...
</select>

Aus irgendeinem Grund bleibt Großbritannien ausgewählt, aber ich möchte, dass "Bitte ein Land auswählen" ausgewählt wird. 

Weiß jemand, wie ich das erreichen kann?

BEARBEITEN

Ich habe meinen Code aktualisiert, da sich die Funktionalität geringfügig geändert hat. Dieses Problem scheint jedoch immer noch aufgetreten zu sein. In meiner Sicht ist das so:

@Html.DropDownListFor(n => n.OrderTemplates, new SelectList(Model.OrderTemplates, "OrderTemplateId", "OrderTemplateName", 1), "Please select an order template")

1 ist die ID der option, die ich auswählen möchte. Ich habe es auch mit dem Text der option versucht, aber das funktioniert auch nicht.

Irgendwelche Ideen?

83
Ibrar Hussain

Ihr Code weist einige konzeptionelle Probleme auf:

Zuerst ,

@Html.DropDownListFor(n => n.OrderTemplates, new SelectList(Model.OrderTemplates, "OrderTemplateId", "OrderTemplateName", 1), "Please select an order template")

Bei Verwendung von DropDownListFor ist der erste Parameter die Eigenschaft, in der der ausgewählte Wert gespeichert wird, wenn Sie das Formular absenden. In Ihrem Fall sollten Sie also eine SelectedOrderId als Teil Ihres Modells oder ähnliches verwenden, um es auf diese Weise zu verwenden: 

@Html.DropDownListFor(n => n.SelectedOrderId, new SelectList(Model.OrderTemplates, "OrderTemplateId", "OrderTemplateName", 1), "Please select an order template")

Zweite ,

Abgesehen von der Verwendung von ViewBag ist das nicht falsch, aber es gibt bessere Möglichkeiten (setzen Sie diese Informationen stattdessen in ViewModel).Es gibt einen "kleinen Fehler" (oder ein unerwartetes Verhalten), wenn sich Ihre ViewBag-Eigenschaft dort befindet, wo Sie sich befinden Die Auswahlliste ist derselbe Name der Eigenschaft, in der Sieden ausgewählten Wert eingeben. Um dies zu vermeiden, verwenden Sie einfach einen anderen Namen, wenn Sie die Eigenschaft benennen, die die Liste der Elemente enthält.

Etwas Code, den ich verwenden würde, wenn Sie diese Probleme vermeiden und besseren MVC-Code schreiben würden:

Viewmodel:

public class MyViewModel{
   public int SelectedOrderId {get; set;}
   public SelectList OrderTemplates {get; set;}

   // Other properties you need in your view
}

Controller:

public ActionResult MyAction(){
   var model = new MyViewModel();
   model.OrderTemplates = new SelectList(db.OrderTemplates, "OrderTemplateId", "OrderTemplateName", 1);
   //Other initialization code

   return View(model);
}

In deiner Sicht:

@Html.DropDownListFor(n => n.SelectedOrderId, Model.OrderTemplates, "Please select an order template")
157
Romias

Für mich hat das nicht so funktioniert:

Regler:

int selectedId = 1;

ViewBag.ItemsSelect = new SelectList(db.Items, "ItemId", "ItemName",selectedId);

Aussicht:

@Html.DropDownListFor(m => m.ItemId,(SelectList)ViewBag.ItemsSelect)

JQuery:

$("document").ready(function () {
    $('#ItemId').val('@Model.ItemId');
});
19
VINICIUS SIN

Wenn Sie ein Objekt wie dieses übergeben:

new SelectList(Model, "Code", "Name", 0)

sie sagen, die Quelle (Model) und der Schlüssel ("Code") den Text ("Name") und den ausgewählten Wert 0. Wahrscheinlich haben Sie keinen 0-Wert in Ihrer Quelle für die Code-Eigenschaft. Daher wählt der HTML-Helfer das erste Element aus. Um den wirklich ausgewählten Wert an dieses Steuerelement zu übergeben.

6
Felipe Oriani

Stellen Sie sicher, dass Sie den ausgewählten Wert getrimmt haben, bevor Sie ihn zuweisen.

//Modell

public class SelectType
{
    public string Text { get; set; }
    public string Value { get; set; }
}

//Regler

var types = new List<SelectType>();
types.Add(new SelectType() { Value =  0, Text = "Select a Type" });
types.Add(new SelectType() { Value =  1, Text = "Family Trust" });
types.Add(new SelectType() { Value =  2, Text = "Unit Trust"});
ViewBag.PartialTypes = types;

//Aussicht

@Html.DropDownListFor(m => m.PartialType, new SelectList(ViewBag.PartialTypes, "Value", "Text"), new { id = "Type" })
3

Wenn Sie wissen, was in der Ansicht angezeigt wird, können Sie auch den Standardwert in Controller festlegen. Legen Sie ihn stattdessen in der Datei view/cshtml fest Sie müssen keinen Standardwert von der HTML-Seite aus festlegen.

In der Controller-Datei.

commission.TypeofCommission = 1;
return View(commission);

In der .cshtml-Datei.

@Html.DropDownListFor(row => row.TypeofCommission, new SelectList(Model.commissionTypeModelList, "type", "typeName"), "--Select--")
2
Smit Patel
public byte UserType
public string SelectUserType

Sie müssen einen bekommen und einen anderen einstellen. Der ausgewählte Wert kann nicht das gleiche Element sein, das Sie gerade einstellen.

@Html.DropDownListFor(p => p.SelectUserType, new SelectList(~~UserTypeNames, "Key", "Value",UserType))

Ich verwende das Enum-Wörterbuch für meine Liste. Deshalb gibt es ein Paar aus "Schlüssel" und "Wert".

0
MEO

Du solltest die Klasse vergessen

SelectList

Verwenden Sie dies in Ihrem Controller:

var customerTypes = new[] 
{ 
    new SelectListItem(){Value = "all", Text= "All"},
    new SelectListItem(){Value = "business", Text= "Business"},
    new SelectListItem(){Value = "private", Text= "Private"},
};

Wählen Sie den Wert aus:

var selectedCustomerType = customerTypes.FirstOrDefault(d => d.Value == "private");
if (selectedCustomerType != null)
    selectedCustomerType.Selected = true;

Fügen Sie die Liste den ViewData hinzu:

ViewBag.CustomerTypes = customerTypes;

Verwenden Sie dies in Ihrer View:

@Html.DropDownList("SectionType", (SelectListItem[])ViewBag.CustomerTypes)

-

Weitere Informationen finden Sie unter: http://www.asp.net/mvc/overview/older-versions/working-with-the-downdownlist-box-and-jquery/seingeschrieben mvc

0
g.breeze

Ich weiß, dass dies nicht wirklich eine Antwort auf die Frage ist, aber ich habe nach einer Möglichkeit gesucht, die DropDownList von einer Liste im laufenden Betrieb in der Ansicht zu initialisieren, als ich ständig über diesen Beitrag stolperte. 

Mein Fehler war, dass ich versucht habe, eine SelectList aus dem Wörterbuch wie folgt zu erstellen:

//wrong!
@Html.DropDownListFor(m => m.Locality, new SelectList(new Dictionary<string, string>() { { Model.Locality, Model.Locality_text } }, Model.Locality, ...

Ich habe dann im offiziellen msdn doc gesucht und festgestellt, dass DropDownListFor nicht notwendigerweise eine SelectList, sondern einen IEnumerable<SelectListItem> erfordert:

//right
@Html.DropDownListFor(m => m.Locality, new List<SelectListItem>() { new SelectListItem() { Value = Model.Locality, Text = Model.Locality_text, Selected = true } }, Model.Locality, new { @class = "form-control select2ddl" })

In meinem Fall kann ich wahrscheinlich auch Model.Locality als ausgewähltes Element weglassen, da es a) das einzige Element ist und b) es bereits in der SelectListItem.Selected-Eigenschaft sagt.

Für den Fall, dass Sie sich fragen, ist die Datenquelle eine AJAX - Seite, die mit dem SelectWoo/Select2-Steuerelement dynamisch geladen wird.

0
Damian Vogel

Ich hatte ein ähnliches Problem, ich verwendete den ViewBag- und den Elementnamen genauso. (Tippfehler)

0
Arun Prasad E S

Hinzufügen des Controller-Abschnitts

  ViewBag.Orders= new SelectList(db.Orders, "Id", "business", paramid);

Füge den HTML-Abschnitt hinzu

   @Html.DropDownList("Orders", null)

Eine einfache Methode

0
ibrahim ozboluk

Für mich allgemeine Lösung :)

@{
     var selectedCity = Model.Cities.Where(k => k.Id == Model.Addres.CityId).FirstOrDefault();
     if (selectedCity != null)
     { 
         @Html.DropDownListFor(model => model.Addres.CityId, new SelectList(Model.Cities, "Id", "Name", selectedCity.Id), new { @class = "form-control" })
     }
     else
     { 
         @Html.DropDownListFor(model => model.Cities, new SelectList(Model.Cities, "Id", "Name", "1"), new { @class = "form-control" })
     }
}
0
dewelloper

Linq zu Dropdown mit leerem Artikel, ausgewähltes Element (funktioniert 100%)
(Stark typisiert, Fehlerquote minimal) Alle Modelländerungen werden in der Bindung angezeigt

Regler

public ActionResult ManageSurveyGroup()
    {
        tbl_Survey sur = new tbl_Survey();
        sur.Survey_Est = "3";

        return View(sur);
    }

Aussicht 

        @{


    //Step One : Getting all the list
    var CompEstdList = (from ComType in db.tbl_CompEstdt orderby ComType.Comp_EstdYr select ComType).ToList();

    //Step Two  : Adding a no Value item **
    CompEstdList.Insert(0, new eDurar.Models.tbl_CompEstdt { Comp_Estdid = 0, Comp_EstdYr = "--Select Company Type--" });

    //Step Three : Setting selected Value if value is present
    var selListEstd= CompEstdList.Select(s => new SelectListItem { Text = s.Comp_EstdYr, Value = s.Comp_Estdid.ToString() });

        }
        @Html.DropDownListFor(model => model.Survey_Est, selListEstd)
        @Html.ValidationMessageFor(model => model.Survey_Est)

Diese Methode zur Datenbindung ist ebenfalls möglich

var selList = CompTypeList.Select(s => new SelectListItem { Text = s.CompTyp_Name, Value = s.CompTyp_Id.ToString(), Selected = s.CompTyp_Id == 3 ? true : false });
0
user4584103