Soru ASP.NET MVC DropDownListFor türünün modeliyle


Ben bir tür liste modeli ile bir görünüm var ve listeden tüm dizeleri içeren bir açılır liste, açılır menüde öğeler olarak yerleştirmek istiyorum. MVC'ye yeniyim, bunu nasıl başarabilirim?

Bunu denedim:

@model List<string>
@Html.DropDownListFor(x => x)

ama bu bir hata attı. Herhangi bir yardım takdir edilir.


44
2018-04-16 19:15


Menşei


@ Html.DropDownListFor (x => yourInputVariable, Model) çalışmalıdır - Kuttan Sujith


Cevaplar:


Bir açılır liste yapmak için iki özelliğe ihtiyacınız var:

  1. Bağlayacağınız bir özellik (genellikle tamsayı veya dizgenin skaler özelliği)
  2. iki özellik içeren öğelerin listesi (değerler için ve metin için bir tane)

Durumunuzda sadece kullanılabilir bir açılır liste oluşturmak için kullanılamayan bir dize listesi vardır.

Sayı 2 için iken değer ve metin aynı olabilir, bağlamak için bir özellik gerekir. Yardımcının zayıf yazılan bir sürümünü kullanabilirsiniz:

@model List<string>
@Html.DropDownList(
    "Foo", 
    new SelectList(
        Model.Select(x => new { Value = x, Text = x }),
        "Value",
        "Text"
    )
)

nerede Foo ddl'nin adı olacak ve varsayılan model bağlayıcı tarafından kullanılacaktır. Böylece oluşturulan işaretleme şunun gibi görünebilir:

<select name="Foo" id="Foo">
    <option value="item 1">item 1</option>
    <option value="item 2">item 2</option>
    <option value="item 3">item 3</option>
    ...
</select>

Bu bir aşağı açılır liste için daha iyi bir görünüm modelinin söyleniyor:

public class MyListModel
{
    public string SelectedItemId { get; set; }
    public IEnumerable<SelectListItem> Items { get; set; }
}

ve sonra:

@model MyListModel
@Html.DropDownListFor(
    x => x.SelectedItemId,
    new SelectList(Model.Items, "Value", "Text")
)

ve bu listedeki bir seçeneği önceden seçmek isterseniz, yapmanız gereken tek şey SelectedItemId Bu görüş modelinin mülkiyeti Value bazı öğelerin Items Toplamak.


115
2018-04-16 19:17



Bu çalışma değil, kontrolörler Post üzerindeki değeri nasıl alırsınız ... SelectedItemId ve Öğeler hem null. - Marc


Bir açılan listede istediğiniz bir tür listesi dizesi varsa, aşağıdakileri yaparım:

List<string> ShipNames = new List<string>(){"A", "A B", "A B C"};

@Html.DropDownListFor(x => x.ShipNames, new SelectList(Model.ShipNames), "Select a Ship...", new { @style = "width:500px" })

Hangi bir aşağı açılır liste gibi verir:

<select id="ShipNames" name="ShipNames" style="width:500px">
    <option value="">Select a Ship...</option>
    <option>A</option>
    <option>A B</option>
    <option>A B C</option>
</select>

Bir kontrolör sonrası değeri almak için; Özellik dizeleri Listesine sahip bir model (ör. MyViewModel) kullanıyorsanız, x => x.ShipNames belirtmiş olduğunuzdan, yalnızca yöntem imzasına sahip olursunuz (çünkü model içinde serileştirilir / sıralanır):

public ActionResult MyActionName (MyViewModel modeli)

Postadaki açılır listeye erişmek istiyorsanız, imza şu olur:

public ActionResult MyActionName (dize ShipNames)


2
2017-10-28 09:52



Bunun işe yaradığından emin değilim. MyActionName (MyViewModel modeli) için, seçilen öğeye hangi özellik eklenecektir. ShipNames özelliği yalnızca seçilebilir değerlerin listesini içerir. - RayLoveless