5

Я создаю веб-приложение ASP.NET MVC6 (ASP.net Core 1.0) и хочу простую форму, которая содержит несколько флажков для одного свойства, позволяя несколько вариантов. Скажем, ради аргумента, я хочу, чтобы пользователь проверил один или несколько флажков из списка цветов (красный, синий, зеленый, желтый и т. Д.).Синтаксис ASP.Net MVC6 для множественной формы флажка

У меня есть три вопроса, связанные с этим ...

1) Какой тип данных свойство цвета должны быть в моей модели представления (string, string[], bool[], List<String>, что-то еще)? SelectList все еще действительная вещь в MVC6?

3) Каков правильный синтаксис в моем представлении для представления списка флажков в форме? Должен ли я использовать новую функцию Tag helpers здесь?

4) Какими должны быть входные параметры для моего действия с контроллером? В asp.net 4.x это будет FormCollection, но не уверен, что это все еще актуально?

ответ

1

Я просто реализовать что-то очень похожее:

Checkbox Модель

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

Просмотр

@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, но я еще не нашел его.

Пользовательские проверки атрибутов

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

Действие контроллера просто:

public async Task<IActionResult> MyControllerAction(MyViewModel vm) 

Я знаю, что это старый вопрос, но мы надеемся, что этот ответ поможет кто-то другой.

Смежные вопросы