2016-03-08 15 views
5

Tôi đang xây dựng một ứng dụng web ASP.NET MVC6 (ASP.net Core 1.0) và muốn có một biểu mẫu đơn giản chứa nhiều hộp kiểm cho một thuộc tính duy nhất, cho phép nhiều lựa chọn. Cho phép nói vì lợi ích của đối số Tôi muốn người dùng kiểm tra một hoặc nhiều hộp kiểm từ danh sách các màu (Đỏ, Xanh lam, xanh lục, vàng, v.v.).Cú pháp ASP.Net MVC6 cho nhiều hình thức hộp kiểm

Tôi có ba câu hỏi liên quan đến này ...

1) dữ liệu Loại nên Colors sở hữu được trong mô hình quan điểm của tôi (string, string[], bool[], List<String>, cái gì khác)? là SelectList vẫn là một điều hợp lệ trong MVC6?

3) Cú pháp chính xác trong Chế độ xem của tôi để biểu thị danh sách hộp kiểm trong biểu mẫu là gì? Tôi có nên sử dụng tính năng Tag helpers mới ở đây không?

4) Các thông số đầu vào nên cho hành động điều khiển của tôi là gì? Trong asp.net 4.x nó sẽ là một FormCollection nhưng không chắc chắn nếu đó vẫn còn hợp lệ?

Trả lời

1

Tôi vừa mới thực hiện một cái gì đó rất giống nhau:

Checkbox Mẫu

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

Xem

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

Tôi rất muốn biết liệu có cách nào để thực hiện phần xem này trong MVC6 hay không, nhưng tôi chưa tìm thấy phần nào.

Tuỳ chỉnh Validation Attribute

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

Các điều khiển hành động chỉ đơn giản là:

public async Task<IActionResult> MyControllerAction(MyViewModel vm) 

Tôi biết đây là một câu hỏi cũ, nhưng hy vọng câu trả lời này sẽ giúp người khác.

Các vấn đề liên quan