2016-03-08 19 views
5

Bir ASP.NET MVC6 web uygulaması (ASP.NET Çekirdek 1.0) yapıyorum ve tek bir özellik için birden çok seçime izin veren birden çok onay kutusu içeren basit bir form istiyorum. Argümanın iyiliği için diyelim: Kullanıcının bir veya daha fazla onay kutusunu bir renk listesinden kontrol etmesini istiyorum (Kırmızı, Mavi, yeşil, sarı vb.).Birden çok onay kutusu formu için ASP.Net MVC6 sözdizimi

Ben bununla ilgili üç soru var ...

1) hangi tür veriler Renkler mülk benim bakış modelinde olmalıdır (string, string[], bool[], List<String>, başka bir şey)? MVC6'da SelectList hala geçerli bir şey mi?

3) Formdaki onay kutularının bir listesini temsil etmek için Görünümümdeki doğru sözdizimi nedir? Yeni Tag helpers özelliğini kullanmalı mıyım?

4) Giriş parametreleri benim denetleyici eylemim için ne olmalıdır? Asp.net 4.x'de FormCollection olurdu, ancak hala geçerli olup olmadığından emin değil misiniz?

Onay Kutusu Modeli

public class CheckboxModel 
{ 
    public int Value { get; set; } 
    public string Text { get; set; } 
    public bool Checked { get; set; } 
} 

ViewModel

public class MyViewModel 
{ 
    public MyViewModel() 
    { 
     // populate checkbox collection with defaults here (or in your controller) 
    } 
    [AtLeastOneRequired(ErrorMessage = "Please check at least one checkbox.")] 
    public class List<CheckboxModel> Checkboxes { get; set; } 
} 

Görünüm

: Sadece çok benzer bir şey uyguladık

cevap

1
@for (var i = 0; i < Model.Checkboxes.Count; i++) 
{ 
    <div class="checkbox-inline"> 
     <input type="checkbox" asp-for="@Model.Checkboxes[i].Checked"/> 
     <input type="hidden" asp-for="@Model.Checkboxes[i].Text" /> 
     <input type="hidden" asp-for="@Model.Checkboxes[i].Value" /> 
     <label asp-for="@Model.Checkboxes[i].Checked">@Model.Checkboxes[i].Text</label> 
    </div> 
} 

MVC6'da bunun görünme kısmını yapmak için bir örümcek yolu olup olmadığını bilmek isterdim, ama henüz bir tane bulamadım.

public async Task<IActionResult> MyControllerAction(MyViewModel vm) 

Bu eski bir soru olduğunu biliyorum, ama umarım bu cevap başkası yardımcı olur:

Özel Doğrulama Kontrolör Eylem basitçe

public class AtLeastOneRequiredAttribute : ValidationAttribute 
{ 
    protected override ValidationResult IsValid(object value, ValidationContext context) 
    { 
     var vm = (MyViewModel) context.ObjectInstance; 
     if (vm.Checkboxes.Any(v => v.Checked)) 
     { 
      return ValidationResult.Success; 
     } 

     return new ValidationResult(ErrorMessage); 
    } 
} 

Özellik.

İlgili konular