[ASP NET MVC] Cách tạo nhiều checkbox cho 1 trường bằng SelectedList

[ASP NET MVC] Cách tạo nhiều checkbox cho 1 trường bằng SelectedList

Trong ASP.NET MVC , thông thường thì Razor chỉ hỗ trợ @Html.CheckboxFor<> cho 1 thuộc tính (trường) cố định trong model.

Nhưng trong trường hợp chúng ta muốn tạo nhiều checkbox cho 1 trường thì sao ? Các giá trị được tick chọn sẽ được nối lại với nhau và lưu vào 1 thuộc tính trong model.

Example:


Đầu tiên trong Model newPostViewModel tôi tạo 1 thuộc tính :

 public List<SelectListItem> post_tag { get; set; }

Ở đây tôi tạo sẵn 1 phương thức static để lấy các thẻ tag có sẵn:

public static List<SelectListItem> getTagList()
        {


            return new List<SelectListItem>
        {
            new SelectListItem {Text = "Kiến trúc", Value = "Kiến trúc"},
            new SelectListItem {Text = "Chất liệu", Value = "Chất liệu"},
            new SelectListItem {Text = "Trang phục", Value = "Trang phục"},
            new SelectListItem {Text = "Binh bị", Value = "Binh bị"},
            new SelectListItem {Text = "Quân sự", Value = "Quân sự"},
            new SelectListItem {Text = "Thần thoại", Value = "Thần thoại"},
            new SelectListItem {Text = "Văn hóa", Value = "Văn hóa"},
            new SelectListItem {Text = "Phong tục", Value = "Phong tục"},
            new SelectListItem {Text = "Tôn giáo", Value = "Tôn giáo"},


        };

Trong controller:

public ActionResult newPost()
        {
            newPostViewModel model = new newPostViewModel
            {
               // Lấy sẵn dữ liệu đổ ra view
                post_tag = PostData.getTagList(),
                Status = true,
            };
            
            return View(model);
        }

Trong view:

<div class="form-group">
                @Html.Label("Thẻ tag bài viết:", htmlAttributes: new { @class = "control-label col-md-4" })
                <div class="col-md-10">
                    <div class="row">
                        @for (int i = 0; i < Model.post_tag.Count; i++)
                        {
                            string title = Model.post_tag[i].Text;
                            <div class="col-md-2">
                                @Html.HiddenFor(model => model.post_tag[i].Text)
                                @Html.HiddenFor(model => model.post_tag[i].Value)
                                @Html.CheckBoxFor(model => model.post_tag[i].Selected)
                                <p style="display:inline">@title</p>
                            </div>


                        }
                    </div>
                    @Html.ValidationMessageFor(model => model.post_tag, "", new { @class = "text-danger" })
                </div>
            </div>


Trong controller xử lý:

 public ActionResult newPost(newPostViewModel model)
        {
            var tag = string.Join(",", model.post_tag.Where(x => x.Selected == true).Select(i=>i.Value));
//Tiếp theo thêm bài viết vào database và return view...
//....
//
        }

Thế là chúng ta đã có thể dùng nhiều checkbox cho 1 trường dữ liệu rồi.


Đăng tuyển miễn phí

Hot line: 02462900388

Email: system@devwork.vn

Support IT

Phone: 02462900388

Email: system@devwork.vn

Support HR

Phone: 02462900388

Email: contact@devwork.vn

NHẬN BẢN TIN VIỆC LÀM

Bình luận

TIN TỨC LIÊN QUAN