2011-08-22 6 views
105

Tôi đang gặp sự cố với DropDownListFor trong ứng dụng MVC3 của mình. Tôi đã có thể sử dụng StackOverflow để tìm ra cách để chúng xuất hiện trên View, 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 View Model khi nó được submit. Để có được điều này để làm việc tôi đã phải tạo ra một lớp bên trong đã có một ID và một tài sản giá trị, sau đó tôi đã phải sử dụng một IEnumerable<Contrib> để đáp ứng các yêu cầu tham số DropDownListFor. Bây giờ, tuy nhiên, làm thế nào là MVC FW phải ánh xạ giá trị được chọn trên trình đơn thả xuống này trở lại thuộc tính chuỗi đơn giản trên mô hình khung nhìn của tôi?MVC3 DropDownListFor - một ví dụ đơn giản?

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 Xem của tôi, tôi đặt thả xuống trên trang như thế này:

<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 các ContribType là (tất nhiên) null.

Cách chính xác để thực hiện việc này là gì?

Trả lời

157

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 tài sản trong đó giá trị kết quả sẽ được.

+1

THANK YOU !!! Sergey, đây chính xác là những gì tôi đã tìm kiếm trong nhiều giờ. –

+0

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ụ' ContribId mới {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 xem 'ContribType' là' -1' điều này có nghĩa là người dùng chưa chọn bất kỳ giá trị nào –

6

Đối với ràng buộc dữ liệu động trong một DropDownList bạn có thể làm như sau:

Tạo ViewBag trong điều khiển như dưới đây

ViewBag.ContribTypeOptions = yourFunctionValue(); 

hiện nay sử dụng giá trị này theo quan điểm như dưới đây:

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

Tôi nghĩ rằng điều này sẽ giúp: Trong Bộ điều khiển, hãy 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 Xem

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

Thông thường, không phải là mẫu hình thần thánh để lộ kho lưu trữ của bạn cho Chế độ xem như thế này. –

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

Ở đây giá trị gia tăng là đối tượng của mô hình, nơi bạn muốn lưu giá trị được lựa chọn của bạn