Thêm một lớp css để chọn bằng @ Html.DropDownList ()


76

Tôi đang xây dựng ứng dụng MVC đầu tiên của mình sau nhiều năm làm các biểu mẫu web và vì một số lý do tôi không thể làm cho ứng dụng này hoạt động:

@Html.DropDownList("PriorityID", String.Empty, new {@class="textbox"} )

Thông báo lỗi:

System.Web.Mvc.HtmlHelper<SPDR.Models.Bug>'không chứa định nghĩa cho DropDownListvà quá tải phương thức mở rộng tốt nhất System.Web.Mvc.Html.SelectExtensions.DropDownList(System.Web.Mvc.HtmlHelper, string, System.Collections.Generic.IEnumerable<System.Web.Mvc.SelectListItem>, object)có một số đối số không hợp lệ

Bất kỳ sự giúp đỡ đánh giá rất cao!


Bạn không sử dụng quá tải lấy các tham số đó. Xem tài liệu .
vcsjones 09/09

Câu trả lời:


105

Nhìn vào bộ điều khiển và tìm hiểu thêm một chút về cách MVC thực sự hoạt động, tôi đã có thể hiểu được điều này.

Chế độ xem của tôi là một trong những chế độ xem được tạo tự động và chứa dòng mã này:

@Html.DropDownList("PriorityID", string.Empty)

Để thêm các thuộc tính html, tôi cần phải làm như sau:

@Html.DropDownList("PriorityID", (IEnumerable<SelectListItem>)ViewBag.PriorityID, new { @class="dropdown" })

Một lần nữa, cảm ơn @Laurent vì sự giúp đỡ của bạn, tôi nhận ra rằng câu hỏi không rõ ràng như nó có thể ...

CẬP NHẬT:

Một cách tốt hơn để làm điều này là sử dụng DropDownListF Nếu có thể, theo cách đó bạn không dựa vào chuỗi ma thuật cho thuộc tính tên

@Html.DropDownListFor(x => x.PriorityID, (IEnumerable<SelectListItem>)ViewBag.PriorityID, new { @class = "dropdown" })

Cảm ơn. Nó giúp tôi rất nhiều
Zamir

4
Tôi đang sử dụng giải pháp của bạn (chế độ xem của tôi cũng được tạo tự động), nhưng khi ở chế độ xem chỉnh sửa, tôi đã mất giá trị đã chọn, bạn có thể giúp tôi không? @ Html.DropDownList ("StateGroupID", (IEnumerable <SelectListItem>) ViewBag.StateGroupID, String.Empty, mới {@class = "form-control"})
Willy

@Willy, tôi không chắc 100% ý bạn là "mất giá trị đã chọn của tôi" - ý bạn là giá trị đã chọn không được đăng lên máy chủ một cách chính xác? Xin vui lòng xem chỉnh sửa của tôi cho một giải pháp khả thi ...
Lee Bailey

2
khi tôi chỉnh sửa bản ghi, danh sách thả xuống trống, nó phải được liên kết với một giá trị. Tôi đã tìm thấy giải pháp bằng cách chuyển giá trị null tại tham số thứ 2 @ Html.DropDownList ("StateGroupID", null, String.Empty, new {@class = "form-control"})
Willy

1
Ổn mà. Nhưng nếu bạn muốn có một giá trị mặc định như -select-với bạn liệt kê thì bạn cần phải sửa đổi nó phải thích@Html.DropDownList("PriorityID", (IEnumerable<SelectListItem>)ViewBag.PriorityID, String.Empty, new { @class="dropdown" })
gdmanandamohon

40

Vì chữ ký từ thông báo lỗi ngụ ý, đối số thứ hai phải là IEnumerable, cụ thể hơn, là IEnumerable của SelectListItem. Đây là danh sách các lựa chọn. Bạn có thể sử dụng loại SelectList, là một IEnumerable của SelectListItem. Đối với một danh sách không có lựa chọn:

@Html.DropDownList("PriorityID", new List<SelectListItem>(), new {@class="textbox"} )

Để có danh sách với một vài lựa chọn:

@Html.DropDownList(
    "PriorityID", 
    new List<SelectListItem> 
    { 
        new SelectListItem { Text = "High", Value = 1 }, 
        new SelectListItem { Text = "Low",  Value = 0 },
    }, 
    new {@class="textbox"})

Có thể hướng dẫn này có thể giúp ích cho bạn: Cách tạo DropDownList với ASP.NET MVC


Cảm ơn Laurent đã trả lời, rất tiếc là tôi vẫn gặp sự cố. Sử dụng dòng mã của bạn, tôi gặp lỗi sau: System.Web.Mvc.SelectList 'không chứa hàm tạo nhận 0 đối số Dòng này hoạt động, tôi nhận được thẻ select, nhưng tôi chỉ muốn thêm một lớp css: @Html .DropDownList ("PriorityID", String.Empty)
Lee Bailey

Bạn nói đúng, tôi đã đổi thành new List<SelectListItem>(). SelectList thực chất là một lớp trợ giúp để giúp bạn tạo một danh sách các lựa chọn từ một danh sách các đối tượng khác nhau. Xem hướng dẫn tôi đã thêm vào bài đăng của mình.
Laurent le Beau-Martin

Cảm ơn, điều đó không hoạt động tuy nhiên sử dụng quá tải # 2 (string name, string optionLabel) menu thả xuống của tôi được điền tự động với các bản ghi từ bảng Ưu tiên của tôi. Đó chính xác là những gì tôi muốn, tôi chỉ cần thêm lớp css - nhưng có vẻ như không có quá tải nào cho phép điều đó ?!
Lee Bailey

19

Nếu bạn thêm nhiều hơn đối số ya danh sách thả xuống trong Asp.Net MVC. Khi bạn Chỉnh sửa bản ghi hoặc chuyển giá trị trong túi xem.

Sử dụng cái này nó sẽ hoạt động: -

@Html.DropDownList("CurrencyID",null,String.Empty, new { @class = "form-control-mandatory" })

Bạn đã làm nên ngày của tôi @mohita
Muhammad Ashikuzzaman.

8

Có một số tùy chọn trong giao diện của các hàm tạo, nếu bạn không có dropdownList và bạn muốn chèn lớp CSS, bạn có thể sử dụng như

@Html.DropDownList("Country", null, "Choose-Category", new {@class="form-control"})

trong trường hợp này Quốc gia là tên danh sách thả xuống của bạn, null nghĩa là bạn không chuyển bất kỳ danh sách chung nào từ bộ điều khiển của bạn "Chọn-Danh mục" là mục đã chọn và là mục cuối cùng trong lớp CSS nếu bạn không muốn chọn bất kỳ tùy chọn mặc định nào. đơn giản thay thế "Chọn-Danh mục" bằng ""


6

Bạn có thể làm điều đó bằng jQuery

  $("select").addClass("form-control")

ở đây, Chọn is- thẻ html, Tên lớp is- kiểm soát biểu mẫu

 @Html.DropDownList("SupplierId", "Select Supplier")

và ở đây, SupplierId là ViewBagList, Chọn nhà cung cấp là - Tên hiển thị


4

Đơn giản hãy thử cái này

@Html.DropDownList("PriorityID", (IEnumerable<SelectListItem>)ViewBag.PriorityID,  new { @class="dropdown" })

Nhưng nếu bạn muốn một giá trị mặc định hoặc không có giá trị tùy chọn thì bạn phải thử cái này, vì String.Emptysẽ chọn không có giá trị nào cho bạn mà sẽ hoạt động như một -select-tùy chọn mặc định

@Html.DropDownList("PriorityID", (IEnumerable<SelectListItem>)ViewBag.PriorityID, String.Empty, new { @class="dropdown" })

1

Hãy thử mã dưới đây:

@Html.DropDownList("ProductTypeID",null,"",new { @class = "form-control"})

1

Thử cái này:

@Html.DropDownList(
    "country", 
    new[] {
        new SelectListItem() { Value = "IN", Text = "India" },
        new SelectListItem() { Value = "US", Text = "United States" }
    }, 
    "Country",
    new { @class = "form-control",@selected = Model.Country}
)

Chào mừng bạn đến với Stack Overflow! Mặc dù đoạn mã này có thể giải quyết câu hỏi, nhưng bao gồm một lời giải thích thực sự giúp cải thiện chất lượng bài đăng của bạn. Hãy nhớ rằng bạn đang trả lời câu hỏi cho người đọc trong tương lai và những người đó có thể không biết lý do cho đề xuất mã của bạn. Cũng vui lòng cố gắng không chèn mã của bạn bằng các nhận xét giải thích, điều này làm giảm khả năng đọc của cả mã và giải thích!
Rizier123

Hãy dành một chút thời gian để đọc qua phần trợ giúp chỉnh sửa trong trung tâm trợ giúp. Định dạng trên Stack Overflow khác với các trang khác.
Rizier123

0

Bạn chỉ có thể làm điều này:

@Html.DropDownList("PriorityID", null, new { @class="form-control"})

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.