Jiletli MVC 4'te DropDownList


142

DropDownListUstura görünümünde bir oluşturmaya çalışıyorum .

Birisi bana bu konuda yardım eder mi?

Normal HTML5 kodu:

<select id="dropdowntipo">
    <option value="Exemplo1">Exemplo1</option>
    <option value="Exemplo2">Exemplo2</option>
    <option value="Exemplo3">Exemplo3</option>
</select>

Bunu denedim:

@{
    var listItems = new List<ListItem> { 
        new ListItem { Text = "Exemplo1", Value = "Exemplo1" }, 
        new ListItem { Text = "Exemplo2", Value = "Exemplo2" }, 
        new ListItem { Text = "Exemplo3", Value = "Exemplo3" } 
    };
}

@Html.DropDownListFor(model => 
    model.tipo, 
    new SelectList(listItems), 
    "-- Select Status --"
)

7
senin var listItems = ...Kumandanızda değil görünümünde olmalıdır.
Liam

1
bu MVC3 ama MVC4 ile aynı sözdizimi: stackoverflow.com/questions/5070762/…
Liam

2
@Liam: Denetleyiciye değil, muhtemelen görünüm modeline aittir. ListItemKullanıcı arabirimine bağlı bir kavram olduğu için denetleyicinin bağımlılığı olmamalıdır . Hatta olmamalı gerçekten sadece görünümde, görünüm modelinde olmak. Denetleyici görünüm modelini oluşturmalı, görünüm modeli verileri içermelidir, görünüm bu verilere UI öğeleri (gibi ListItem) oluşturmalıdır.
David

2
Jilet'i yerel HTML üzerinden kullanmanın değeri nedir; Performans mı yoksa işlevsellik mi? Denetleyiciden hiçbir veri alınmadığından.
Barry MSIH

1
Birisi bana model.tipo özelliğinin neyi temsil ettiğini genel anlamda söyle.

Yanıtlar:


249
@{
   List<SelectListItem> listItems= new List<SelectListItem>();
   listItems.Add(new SelectListItem
        {
          Text = "Exemplo1",
          Value = "Exemplo1"
        });
   listItems.Add(new SelectListItem
        {
            Text = "Exemplo2",
            Value = "Exemplo2",
            Selected = true
        });
   listItems.Add(new SelectListItem
        {
            Text = "Exemplo3",
            Value = "Exemplo3"
        });
}

@Html.DropDownListFor(model => model.tipo, listItems, "-- Select Status --")

2
Listeyi denetleyicide tanımladıysanız, Görünüm'ü görüntülemek için şu şekilde olmanız gerekir: @ Html.DropDownListFor (model => model.model_year, ViewBag.Years List <SelectListItem>, "- Yıl Seç -")
Beşar Ebu Shamaa

4
Son satırda - Hangi modeli arayacağınızı nereden biliyorsunuz? "Tipo" nereden geliyor?
Andre

2
@Andre Model özelliğinin adı. Sorudan okudu. Değer o alana bağlanır.
Hrvoje T

Gönderilen çözümlerin hiçbiri herhangi bir sunucu tarafı doğrulaması gerçekleştirmediğinden dikkatli olmalısınız. Burada, geçerli verilerin modele gönderilmesini sağlamak için hem istemci tarafı hem de sunucu tarafı doğrulaması yapan zarif bir çözüm bulunmaktadır. stackoverflow.com/a/56185910/3960200
Etienne Charland

73
@{var listItems = new List<ListItem>
    {
          new ListItem { Text = "Exemplo1", Value="Exemplo1" },
          new ListItem { Text = "Exemplo2", Value="Exemplo2" },
          new ListItem { Text = "Exemplo3", Value="Exemplo3" }
    };
    }
        @Html.DropDownList("Exemplo",new SelectList(listItems,"Value","Text"))

Bu örnek çalışması için bu kod segmentinin üzerinde kullanarak ekledi. @ kullanarak System.Web.UI.WebControls;
Badar

42

Bunu kullanabilirsiniz:

@Html.DropDownListFor(x => x.Tipo, new List<SelectListItem>
    {
                        new SelectListItem() {Text = "Exemplo1", Value="Exemplo1"},
                        new SelectListItem() {Text = "Exemplo2", Value="Exemplo2"},
                        new SelectListItem() {Text = "Exemplo3", Value="Exemplo3"}
    })  

1
"Tipo" nedir?
Andre

1
@Andre. Model üzerinde Tipo özelliği. İlk gönderiye bakın.
Gabriel Simas

1
teşekkürler, yine de nereden aldığını bilmiyorum
Andre

22

// ViewModel

public class RegisterViewModel
{

    public RegisterViewModel()
    {
        ActionsList = new List<SelectListItem>();
    }

    public IEnumerable<SelectListItem> ActionsList { get; set; }

    public string StudentGrade { get; set; }

  }

// Numaralandırma Sınıfı:

public enum GradeTypes
{
    A,
    B,
    C,
    D,
    E,
    F,
    G,
    H
}

// Denetleyici Eylemi

 public ActionResult Student()
    {
RegisterViewModel vm = new RegisterViewModel();
IEnumerable<GradeTypes> actionTypes = Enum.GetValues(typeof(GradeTypes))
                                             .Cast<GradeTypes>();
        vm.ActionsList = from action in actionTypes
                         select new SelectListItem
                         {
                             Text = action.ToString(),
                             Value = action.ToString()
                         };
        return View(vm);
    }

// Eylemi görüntüle

 <div class="form-group">
                                <label class="col-lg-2 control-label" for="hobies">Student Grade:</label>
                                <div class="col-lg-10">
                                   @Html.DropDownListFor(model => model.StudentGrade, Model.ActionsList, new { @class = "form-control" })
                                </div>

11

İşte en kolay cevap:

sadece sizin eklemeniz:

@Html.DropDownListFor(model => model.tipo, new SelectList(new[]{"Exemplo1",
"Exemplo2", "Exemplo3"}))

VEYA denetleyicinize ekleyin:

var exemploList= new SelectList(new[] { "Exemplo1:", "Exemplo2", "Exemplo3" });
        ViewBag.ExemploList = exemploList;

ve görüşünüzü ekleyin:

@Html.DropDownListFor(model => model.tipo, (SelectList)ViewBag.ExemploList )

Bunu Jess Chadwick ile öğrendim


8

İnanın bana bunu yapmak için birçok seçenek denedim ve burada cevap var

ancak her zaman hem ön uç hem de arka uç geliştiriciler için şimdiye kadar bildiğim en iyi uygulamayı ve en iyi yolu arıyorum for loop(evet şaka yapmıyorum)

Ön uç size sahte verileri UI Sayfaları verdiğinde Çünkü o da onun bu kadar spesifik seçme seçeneği sınıfları ve bazı satır içi stilleri eklendi hard to dealkullanarakHtmlHelper

Şuna bir bakın:

<select class="input-lg" style="">
    <option value="0" style="color:#ccc !important;">
        Please select the membership name to be searched for
    </option>
    <option value="1">11</option>
    <option value="2">22</option>
    <option value="3">33</option>
    <option value="4">44</option>
</select>

ön uç geliştiriciden bu yüzden en iyi çözüm for döngüsünü kullanmaktır

kontrolör eyleminde (...) 'den gelen verilerden createveya get your listverilerinden ve ViewModel, ViewBag veya herhangi bir şekilde

//This returns object that contain Items and TotalCount
ViewBag.MembershipList = await _membershipAppService.GetAllMemberships();

İkincisi, görünümde loop'un açılır listeyi doldurması için bunu basitleştirin

<select class="input-lg" name="PrerequisiteMembershipId" id="PrerequisiteMembershipId">
    <option value="" style="color:#ccc !important;">
        Please select the membership name to be searched for
    </option>
    @foreach (var item in ViewBag.MembershipList.Items)
    {
        <option value="@item.Id" @(Model.PrerequisiteMembershipId == item.Id ? "selected" : "")>
            @item.Name
        </option>
    }
</select>

bu şekilde UI Tasarımını ve basit, kolay ve daha okunabilir kırılmaz

ustura kullanmasan bile bu sana yardım etsin


7

Bir dizi kullanmak, bir liste oluşturmaktan biraz daha verimli olur.

@Html.DropDownListFor(x => x.Tipo, new SelectListItem[]{
                new SelectListItem() {Text = "Exemplo1", Value="Exemplo1"},
                new SelectListItem() {Text = "Exemplo2", Value="Exemplo2"},
                new SelectListItem() {Text = "Exemplo3", Value="Exemplo3"}})

6
@{
List<SelectListItem> listItems= new List<SelectListItem>();
listItems.Add(new SelectListItem
    {
      Text = "One",
      Value = "1"
    });
listItems.Add(new SelectListItem
    {
        Text = "Two",
        Value = "2",
    });
listItems.Add(new SelectListItem
    {
        Text = "Three",
        Value = "3"
    });
listItems.Add(new SelectListItem
{
   Text = "Four",
   Value = "4"
});
listItems.Add(new SelectListItem
{
   Text = "Five",
   Value = "5"
});
}
@Html.DropDownList("DDlDemo",new SelectList(listItems,"Value","Text"))

Bakınız: - MVC 4 tıraş makinesi örneğinde açılır liste oluşturun


4

sadece bunu kullan

public ActionResult LoadCountries()
{
     List<SelectListItem> li = new List<SelectListItem>();
     li.Add(new SelectListItem { Text = "Select", Value = "0" });
     li.Add(new SelectListItem { Text = "India", Value = "1" });
     li.Add(new SelectListItem { Text = "Srilanka", Value = "2" });
     li.Add(new SelectListItem { Text = "China", Value = "3" });
     li.Add(new SelectListItem { Text = "Austrila", Value = "4" });
     li.Add(new SelectListItem { Text = "USA", Value = "5" });
     li.Add(new SelectListItem { Text = "UK", Value = "6" });
     ViewData["country"] = li;
     return View();
}

ve Görünümde aşağıdakileri kullanın.

 @Html.DropDownList("Country", ViewData["country"] as List<SelectListItem>)

Veri Kümesinden veri almak ve bu verileri bir liste kutusuna doldurmak istiyorsanız aşağıdaki kodu kullanın.

List<SelectListItem> li= new List<SelectListItem>();
for (int rows = 0; rows <= ds.Tables[0].Rows.Count - 1; rows++)
{
    li.Add(new SelectListItem { Text = ds.Tables[0].Rows[rows][1].ToString(), Value = ds.Tables[0].Rows[rows][0].ToString() });
}
ViewData["FeedBack"] = li;
return View();

ve görünümde aşağıdaki kodu yazın.

@Html.DropDownList("FeedBack", ViewData["FeedBack"] as List<SelectListItem>)

3

ASP.net 5 (MVC 6) veya daha yenisini kullanıyorsanız yeni Tag Helpers'ı çok güzel bir sözdizimi için kullanabilirsiniz:

<select asp-for="tipo">
    <option value="Exemplo1">Exemplo1</option>
    <option value="Exemplo2">Exemplo2</option>
    <option value="Exemplo3">Exemplo3</option>
</select>

Öğelerin dinamik olduğu bir örnek verebilir misiniz? Statik bir liste için etiket yardımcılarını kullanmaya gerek yoktur. Ve seçilen seçeneklerden birini yapın.
user3285954

Mesele şu ki, veri bağlı. Değişkenin ayarlandığı seçeneği otomatik olarak seçer ve form gönderildiğinde değişkeni ayarlar. Öğeleri dinamik hale getirmek için, sadece bir tıraş bıçağı yapın.
Bryan Legend

1

Bu aynı şekilde yapılabilir

@model IEnumerable<ItemList>

<select id="dropdowntipo">
    <option value="0">Select Item</option>
    
    @{
      foreach(var item in Model)
      {
        <option value= "@item.Value">@item.DisplayText</option>
      }
    }

</select>


0

List<tblstatu> status = new List<tblstatu>();
            status = psobj.getstatus();
            model.statuslist = status;
            model.statusid = status.Select(x => new SelectListItem
            {
                Value = x.StatusId.ToString(),
                Text = x.StatusName
            });


  @Html.DropDownListFor(m => m.status_id, Model.statusid, "Select", new { @class = "form-control input-xlarge required", @type = "text", @autocomplete = "off" })

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.