Có cách nào đơn giản để thêm tùy chọn mặc định "--Xin chọn--" vào DropDownListFor trong MVC 3 không?DropdownListFor giá trị mặc định
Trả lời
Vì vậy, tôi đã làm một cái gì đó như thế này:
@Html.DropDownListFor(model => model.Dessert,
new SelectList(Model.AvailableDesserts, "DessertID", "DessertName"),
"---Select A Dessert ---")
vẻ làm việc khá tốt. Dessert
trong chế độ xem của tôi là chế độ xem được người dùng chọn. AvailableDesserts
là một bộ sưu tập của những người để lựa chọn. Hy vọng rằng sẽ giúp.
Tôi có một phương pháp vài phần mở rộng trên SelectList
public static SelectList PreAppend(this SelectList list, string dataTextField, string selectedValue, bool selected=false)
{
var items = new List<SelectListItem>();
items.Add(new SelectListItem() { Selected = selected, Text = dataTextField, Value = selectedValue });
items.AddRange(list.Items.Cast<SelectListItem>().ToList());
return new SelectList(items, "Value", "Text");
}
public static SelectList Append(this SelectList list, string dataTextField, string selectedValue, bool selected=false)
{
var items = list.Items.Cast<SelectListItem>().ToList();
items.Add(new SelectListItem() { Selected = selected, Text = dataTextField, Value = selectedValue });
return new SelectList(items, "Value", "Text");
}
public static SelectList Default(this SelectList list,string DataTextField,string SelectedValue)
{
return list.PreAppend(DataTextField, SelectedValue, true);
}
Sau đó dao cạo của tôi trông giống như:
@Html.DropDownListFor(m=>m.SelectedState,
Model.StateList().Default("Select One",""))
Tôi mới tham gia MVC, bạn có thể vui lòng không cho tôi biết làm thế nào tôi sẽ thêm các phương pháp mở rộng vào SelectList của tôi? – user517406
Thêm lớp tĩnh vào dự án của bạn và thêm các phương thức này vào dự án. Đảm bảo rằng trang của bạn đang cố gắng gọi cho chúng từ nhập khẩu không gian tên nếu không phải là không gian tên dự án toàn cầu. Cú pháp trong dao cạo là '@using Myproject.Extensions' hoặc bất kỳ tên nào bạn đặt tên cho lớp của bạn. Để tham khảo thêm, vui lòng đọc: http://msdn.microsoft.com/en-us/library/bb383977.aspx – asawyer
Tôi thích tuyến đường Helper/Extension hơn khi bạn đề xuất nhưng đang gặp phải sự cố khi triển khai. Tôi nhận được lỗi sau: 'Không thể bỏ đối tượng kiểu 'MyApp.UI.Models.Address' để nhập 'System.Web.Mvc.SelectListItem'.' Mã tôi sử dụng là:' @ Html.DropDownListFor (m => m.EmailAddressID, SelectList mới (Model.Addresses, "AddressID", "EmailAddress"). PreAppend ("--- Chọn một địa chỉ ---", "")) 'Nó biên dịch tốt và được nhận ra trong khung nhìn, nhưng trình bày lỗi ở trên khi chạy. Phương thức hardcoded được trình bày bởi @itsmatt không hoạt động. Bất kỳ ý tưởng về sửa đổi tôi có thể cần đến các phương pháp mở rộng? – atconway
Hi gì về việc cố gắng này (trong trường hợp bạn sử dụng phương pháp DisplayFor)
private IEnumerable<SelectListItem> AddDefaultOption(IEnumerable<SelectListItem> list, string dataTextField, string selectedValue)
{
var items = new List<SelectListItem>();
items.Add(new SelectListItem() { Text = dataTextField, Value = selectedValue});
items.AddRange(list);
return items;
}
Sau đó, chỉ cần thêm mã này vào Bộ điều khiển
của bạn//lambda expression binding
ViewBag.YourList = db.YourTable.Select(x => x).ToList().Select(x => new SelectListItem
{
Value = x.Id.ToString(),
Text = x.DisplayName.ToString()
});
ViewBag.YourList = AddDefaultOption(ViewBag.YourList, "Select One...", "null", true);
Và cuối cùng tại Xem bạn có thể hiển thị một danh sách thả xuống, combobox chỉ như thế này
<div class="editor-label">
Your Label
</div>
<div class="editor-field">
@Html.DropDownListFor(model => model.ForeignKey, (IEnumerable<SelectListItem>)ViewBag.YourList)
</div>
Đó là lạ mà bạn đang làm '.Select (x => x). ToList()' trước khi ' .Select (x => new SelectListItem' Điều đó là không cần thiết. –
tôi muốn thiết lập giá trị mặc định cho bất cứ điều gì đã được thông qua như một Url Parameter gọi SiteType:
<div class="form-group">
@Html.LabelFor(model => model.Type, new { @class = "control-label col-md-2" })
<div class="col-md-10">
@Html.DropDownListFor(model => model.Type, ChangeOrderSite.SiteTypeNames.Select(s => new SelectListItem { Text = s.Value, Value = s.Key.ToString(), Selected = s.Key.ToString() == Request["SiteType"] }), new { @class = "control-label col-md-2" })
@Html.ValidationMessageFor(model => model.Type)
</div>
</div>
Trình đơn thả xuống của tôi là danh sách các loại trang web.
- 1. giá trị chung Mặc định
- 2. RingtonePreference Giá trị mặc định
- 3. DependencyProperty Giá trị mặc định
- 4. Giá trị mặc định của thuộc tính lớp GORM giá trị mặc định
- 5. giá trị đối tượng mặc định trong chức năng với đối số mặc định giá trị
- 6. (mặc định) Implicit giá trị so với giá trị Explicit
- 7. Đặt giá trị mặc định trong Mockito
- 8. Thông báo setLights() Giá trị mặc định?
- 9. WTForms RadioField giá trị mặc định
- 10. ComboBox FXML giá trị mặc định
- 11. cách đặt giá trị mặc định HTML.EditorFor()
- 12. Giá trị đối số mặc định C++
- 13. Giá trị mặc định của BOOL
- 14. Giá trị CSS mặc định của IE
- 15. Hibernate giá trị mặc định hbm2ddl.auto
- 16. Giá trị mặc định của loại động?
- 17. Giá trị mặc định GOMAXPROCS là gì
- 18. DataContract, mặc định DataMember giá trị
- 19. Đặt giá trị mặc định bằng sqlalchemy
- 20. thay đổi mặc định Giá trị Boolean
- 21. LINQ to SQL giá trị mặc định
- 22. Android - giá trị mặc định trong editText
- 23. Facelets: ui: param giá trị mặc định
- 24. Preference giá trị nhạc chuông mặc định
- 25. Đặt giá trị mặc định trong DataContract?
- 26. ActiveRecord :: Store với giá trị mặc định
- 27. RestTemplate - giá trị timeout mặc định
- 28. Giá trị thuộc tính ViewBag trong DropDownListFor thay vì giá trị thuộc tính Model
- 29. Chỉ định giá trị mặc định cho loại tham chiếu
- 30. Cách chỉ định giá trị mặc định cho VARIANT_BOOL?
Điều này thêm "--Xin vui lòng chọn--" ở đầu trình đơn thả xuống, nhưng mặc định là mục tiếp theo trong trình đơn thả xuống, ít nhất trong ví dụ của tôi: @ Html.DropDownListFor ( x => x.SelectedTeamID, SelectList mới (Model.Teams, "TeamID", "TeamName"), "--Xin vui lòng chọn--") – user517406
Giá trị mặc định của SelectedTeamID bạn đang gửi đến Chế độ xem là gì? Trong 'Create.cshtml' của tôi, nó sẽ mặc định là tùy chọn" --- Select A Dessert --- "(ID là một số nguyên và mặc định là 0) trong' Edit.cshtml' của nó, nó sẽ mặc định giá trị hiện tại là cho 'model.Dessert' trong viewmodel của tôi. Điều này có thể là kết quả của DessertIds của tôi bắt đầu từ 1 (khóa chính trong bảng Món tráng miệng của tôi bắt đầu từ 1). Chỉ là một đoán, thực sự. Tôi nghĩ đó là lý do tại sao điều đó xảy ra. – itsmatt
Tôi tin rằng những gì nó làm là nhìn vào giá trị hiện tại của trường mô hình và sau đó thử chọn theo mặc định. Ví dụ, nếu khi bạn xây dựng viewmodel của bạn (nói, cho một cuộc gọi Create) và thiết lập rõ ràng SelectedTeamID thành 6 và chuyển nó vào View, nó sẽ hiển thị TeamName được liên kết với TeamID 6, giả sử một tồn tại. – itsmatt