Để tạo danh sách thả xuống, bạn cần 2 thuộc tính trên mô hình chế độ xem: thuộc tính vô hướng để ràng buộc giá trị đã chọn và thuộc tính bộ sưu tập sẽ chứa các mục để hiển thị trong trình đơn thả xuống.
Vì vậy, bạn có thể định nghĩa một mô hình điểm:
public class DropDownListViewModel
{
public string SelectedValue { get; set; }
public IEnumerable<SelectListItem> Items { get; set; }
}
và sau đó trên mô hình giao diện chính của bạn có một tài sản thuộc loại này:
public DropDownListViewModel Foo { get; set; }
Bây giờ bạn có thể có một mẫu biên tập tùy chỉnh cho điều này loại (~/Views/Shared/EditorTemplates/DropDownListViewModel.ascx
):
<%@ Control
Language="C#" Inherits="System.Web.Mvc.ViewUserControl<DropDownListViewModel>"
%>
<%= Html.DropDownListFor(x => x.SelectedValue, Model.Items) %>
và sau đó trong giao diện chính của bạn:
<%= Html.EditorFor(x => x.Foo) %>
Bây giờ tất cả những gì còn lại là phải có hành động điều khiển của bạn render giao diện chính để lấp đầy Foo
tài sản với giá trị tương ứng. Có thể được mã hóa cứng, đến từ một kho lưu trữ hoặc bất cứ thứ gì. Nó không thực sự quan trọng.
Mặt khác nếu bạn biết trước các giá trị bạn có thể hardcode họ trong các mẫu biên tập (~/Views/Shared/EditorTemplates/YesNoDropDown.ascx
):
<%= Html.DropDownList(
"",
new SelectList(
new[]
{
new { Value = "true", Text = "Yes" },
new { Value = "false", Text = "No" },
},
"Value",
"Text",
Model
)
) %>
và sau đó:
<%= Html.EditorFor(x => x.IsActive, "YesNoDropDown") %>
hoặc bằng cách trang trí tài sản IsActive trên kiểu xem của bạn:
[UIHint("YesNoDropDown")]
public bool IsActive { get; set; }
và sau đó:
<%= Html.EditorFor(x => x.IsActive) %>
Cảm ơn bạn đã giải pháp. Tôi đang nhận được một ngoại lệ định danh được mong đợi trong trang trình soạn thảo .ascx trang ... gần mới [] – ZVenue
@ZVenue, vẫn còn vấn đề với điều này? –
Không còn vấn đề gì nữa .. cảm ơn sự giúp đỡ của bạn .. Giải pháp đã sửa đổi của bạn ở đây .. http://stackoverflow.com/questions/9568111/problems-converting-editorfor-to-dropdownlist – ZVenue