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?
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?
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")
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');
});
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.
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" })
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--")
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".
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
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.
Ich hatte ein ähnliches Problem, ich verwendete den ViewBag- und den Elementnamen genauso. (Tippfehler)
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
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" })
}
}
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 });