MVC3 DropDownListFor - một ví dụ đơn giản?


112

Tôi đang gặp sự cố với DropDownListForứng dụng MVC3 của mình. Tôi đã có thể sử dụng StackOverflow để tìm cách làm cho chúng xuất hiện trên Chế độ xem, nhưng bây giờ tôi không biết cách nắm bắt các giá trị trong các thuộc tính tương ứng của nó trên Mô hình chế độ xem khi nó được gửi. Để làm được điều này, tôi phải tạo một lớp bên trong có ID và thuộc tính giá trị, sau đó tôi phải sử dụng một IEnumerable<Contrib>để đáp ứng các DropDownListForyêu cầu tham số. Tuy nhiên, bây giờ, MVC FW phải ánh xạ giá trị được chọn trên menu thả xuống này như thế nào vào thuộc tính chuỗi đơn giản trên mô hình chế độ xem của tôi?

public class MyViewModelClass
{
    public class Contrib
    {
        public int ContribId { get; set; }
        public string Value { get; set; }
    }

    public IEnumerable<Contrib> ContribTypeOptions = 
        new List<Contrib>
        {
            new Contrib {ContribId = 0, Value = "Payroll Deduction"},
            new Contrib {ContribId = 1, Value = "Bill Me"}
        };

    [DisplayName("Contribution Type")]
    public string ContribType { get; set; }
}

Trong Chế độ xem của tôi, tôi đặt menu thả xuống trên trang như sau:

<div class="editor-label">
    @Html.LabelFor(m => m.ContribType)
</div>
<div class="editor-field">
    @Html.DropDownListFor(m => m.ContribTypeOptions.First().ContribId, 
             new SelectList(Model.ContribTypeOptions, "ContribId", "Value"))
</div>

Khi tôi gửi biểu mẫu ContribTypethì (tất nhiên) là null.

cách chính xác để làm điều này là gì?

Câu trả lời:


166

Bạn nên làm như thế này:

@Html.DropDownListFor(m => m.ContribType, 
                new SelectList(Model.ContribTypeOptions, 
                               "ContribId", "Value"))

Ở đâu:

m => m.ContribType

là một thuộc tính mà giá trị kết quả sẽ là.


2
CẢM ƠN BẠN!!! Sergey, đây chính xác là thứ mà tôi đã tìm kiếm trong nhiều giờ.
Trey Carroll

Cảm ơn :) cho câu trả lời của bạn Có cách nào để hiển thị "- Chọn--" từ đây không. ?
kbvishnu

1
@VeeKeyBee, bạn có thể thêm mục mới vào danh sách contribTypeOptions, ví dụ new Contrib {ContribId = -1, Value = "Please Select"}và nó sẽ được hiển thị trong danh sách thả xuống. Hơn bạn có thể kiểm tra nếu ContribType-1đây là phương tiện mà người dùng chưa chọn bất kỳ giá trị
Sergey Gavruk

9
Bạn có thể làm điều này:@Html.DropDownListFor(m => m.ContribType, new SelectList(Model.ContribTypeOptions, "ContribId", "Value", Model.ContribTypeOptions.First().ContribId), "Select, please")
Sergey Gavruk

1
@SergeyGavruk. Câu trả lời này đã được sử dụng làm bản dupe cho một số câu hỏi gần đây nhưng đang gây nhầm lẫn cho một số người dùng vì câu lệnh tham số cuối cùng của phương thức tạo danh sách Chọn là một giá trị được chọn - Tham số cuối cùng bị phương thức bỏ qua (phương thức này tự xây dựng nội bộ SelectList) . Giá trị của thuộc tính ( ContribType) xác định những gì được chọn (đó là cách hoạt động của liên kết mô hình) và mã chỉ nên là. @Html.DropDownListFor(m => m.ContribType, new SelectList(Model.ContribTypeOptions, "ContribId", "Value")Bạn có thể vui lòng chỉnh sửa câu trả lời cho đúng.

7

Tôi nghĩ điều này sẽ hữu ích: Trong Bộ điều khiển, lấy các mục danh sách và giá trị đã chọn

public ActionResult Edit(int id)
{
    ItemsStore item = itemStoreRepository.FindById(id);
    ViewBag.CategoryId = new SelectList(categoryRepository.Query().Get(), 
                                        "Id", "Name",item.CategoryId);

    // ViewBag to pass values to View and SelectList
    //(get list of items,valuefield,textfield,selectedValue)

    return View(item);
}

và trong Chế độ xem

@Html.DropDownList("CategoryId",String.Empty)

5
Việc hiển thị kho lưu trữ của bạn với Chế độ xem như thế này thường không phải là một mô hình thần thánh.
André Pena

6

Để liên kết Dữ liệu động trong DropDownList, bạn có thể làm như sau:

Tạo ViewBag trong Controller như bên dưới

ViewBag.ContribTypeOptions = yourFunctionValue();

bây giờ sử dụng giá trị này trong chế độ xem như bên dưới:

@Html.DropDownListFor(m => m.ContribType, 
    new SelectList(@ViewBag.ContribTypeOptions, "ContribId", 
                   "Value", Model.ContribTypeOptions.First().ContribId), 
    "Select, please")

0
     @Html.DropDownListFor(m => m.SelectedValue,Your List,"ID","Values")

Ở đây Giá trị là đối tượng của mô hình mà bạn muốn lưu Giá trị đã chọn của mình

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.