2016-03-08 11 views
5

Buduję aplikację sieci web ASP.NET MVC6 (ASP.net Core 1.0) i chcę prosty formularz, który zawiera wiele pól wyboru dla jednej właściwości, umożliwiając wiele wyborów. Powiedzmy, ze względu na argument, chcę, aby użytkownik sprawdził jedno lub więcej pól wyboru z listy kolorów (czerwony, niebieski, zielony, żółty itd.).Składnia ASP.Net MVC6 dla wielu pól wyboru formularza

Mam trzy pytania związane z tą ...

1) Jaki typ danych własnością Kolory powinny być moim zdaniem modelu (string, string[], bool[], List<String> coś innego)? Czy w MVC6 nadal jest ważna rzecz?

3) Jaka jest poprawna składnia w moim widoku do reprezentowania listy pól wyboru w formularzu? Czy powinienem używać tutaj nowej funkcji Tag helpers?

4) Jakie parametry powinny mieć parametry kontrolera? W asp.net 4.x będzie to FormCollection, ale nie jestem pewien, czy to jest nadal ważne?

Odpowiedz

1

Właśnie realizowany coś bardzo podobnego:

Pole wyboru modelu

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; } 
} 

Zobacz

@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> 
} 

Chciałbym wiedzieć, czy istnieje sposób, aby zrobić część widoku w MVC6, ale jeszcze nie znalazłem.

klienta Validation Atrybut

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); 
    } 
} 

Controller Akcja jest prosta:

public async Task<IActionResult> MyControllerAction(MyViewModel vm) 

wiem, że to jest stare pytanie, ale mam nadzieję, że ta odpowiedź pomoże ktoś inny.

Powiązane problemy