2012-01-02 18 views
5

Tôi muốn tạo một DropDownList với một ràng buộc cho một trong các dữ liệu mô hình của tôi, nhưng tôi muốn các mục thả xuống được xây dựng trong Chế độ xem và tôi không muốn các mục đến trong dữ liệu Mô hình hoặc từ bộ điều khiển của tôi. bạn có thể xin đề nghị làm thế nào để xây dựng SelectList trong Chế độ xem Về cơ bản tôi muốn tạo một cái gì đó như thế này:Tạo các mục DropDownListFor trong dạng xem

<%= Html.DropDownListFor(model=>model.SomeProperty,<<create the dropdown list items here>> %> 

Xin gợi ý.

-Sampat.

+0

Tại sao bạn không muốn các mục đến từ chế độ xem? Chế độ xem chỉ hiển thị dữ liệu. Tại sao bạn không thể sử dụng mô hình xem? Tôi có một mẫu thả xuống tại http://code.msdn.microsoft.com/Using-the-DropDownList-67f9367d – RickAndMSFT

Trả lời

6

Bạn không thể sử dụng theo cách đó. Như tên cho thấy nó cho trả về một phần tử chọn HTML cho mỗi thuộc tính trong đối tượng được biểu diễn bằng biểu thức được chỉ định bằng cách sử dụng các mục danh sách được chỉ định và các thuộc tính HTML.

Mặc dù bạn có thể tạo đối tượng trong danh sách này theo quan điểm như sau: -

@Html.DropDownListFor(model => model.DropDownElement, 
         new SelectList(model.DropDownElement, "Id", "Name")) 

Cập nhật

Tôi sẽ lấy ví dụ về một mô hình nước với một cặp Id/Name. Giống như sau

public class Country 
{ 
    public int Id { get; set; } 
    public string Name { get; set; } 
} 

Bây giờ, trong hành động điều khiển của bạn, bạn có thể vượt qua nó như một SelectList:

public ActionResult YourAction() 
{ 
    YourModel yourModel = new YourModel(); // Just for reference. I suppose you must be passing some model to your view 
    ViewBag.DropDownList = new SelectList(db.Countries, "Id", "Name"); // This way you don't need to make any changes with your passing model. 
    return View(yourModel); 
} 

Và cuối cùng trong View, bạn có thể sử dụng DropDownListFor theo cách sau đây.

@Html.DropDownListFor(model => model.YourModelProperty, 
    (IEnumerable<SelectListItem>)ViewBag.DropDownList, "---Select a value---") 

Trên một Sidenote, nếu bạn chỉ muốn hiển thị một danh sách các số có giá trị, bạn có thể trực tiếp nhập vào HTML và sử dụng nó, thay vì sử dụng DropDownListFor. Giống như follwing

<select id="yourModelPropertyName" name="yourModelPropertyName"> 
    <option value="">---Select Value---</option> 
    <option value="1">India</option> 
    <option value="2">Australia</option> 
    <option value="3">US</option> 
    <option value="4">England</option> 
    <option value="5">Finland</option> 
</select> 

Chỉ cần chắc chắn rằng "yourModelPropertyName" là đúng và nó sẽ là một cho bất động sản nơi bạn muốn nó được cập nhật

More cập nhật

Trong quan điểm nơi bạn wan để hiển thị giá trị đã chọn, hãy sử dụng mã bên dưới

<select id="yourModelPropertyName" name="yourModelPropertyName"> 
    <option selected="selected" value="1">@model.YourDropDownList</option> 
    <option value="2">India</option> 
    <option value="3">Australia</option> 
</select> 

Điều này sẽ thực hiện thủ thuật :-)

+0

Thuộc tính cần cập nhật chỉ là một số nguyên được cập nhật dựa trên mục đã chọn trong trình đơn thả xuống, trong ví dụ của bạn "DropDownElement" là giá trị int của tôi trong DB, bây giờ tôi cần danh sách được hiển thị trong danh sách thả xuống là cặp tên/giá trị tĩnh và liên kết giá trị đã chọn với thuộc tính trong khi gửi mô hình. – Sampat

+0

Tôi đã chỉnh sửa câu trả lời của mình với ví dụ minh họa hơn. Hy vọng nó sẽ giúp –

+0

BTW mã xem là cú pháp Razor. Bạn sẽ cần xóa "@" và đặt "<%" ở đầu và "%>" ở cuối. –

1

@Pankaj cung cấp cho bạn một cách thô lỗ để làm điều đó. Bạn cũng có thể chuyển đối tượng IEnumerable của SelectListItem đối tượng vào chế độ xem của bạn từ bộ điều khiển và tạo phần tử chọn dựa trên đó.

Đây là một ví dụ điển hình:

A Way of Working with Html Select Element (AKA DropDownList) In ASP.NET MVC

Hãy tưởng tượng rằng điều khiển của bạn trông giống như một cái gì đó như thế này:

public ActionResult Index() { 

    var products = productRepo.GetAll(); 

    registerProductCategorySelectListViewBag(); 
    return View(products); 
} 

private void registerProductCategorySelectListViewBag() { 

    ViewBag.ProductCategorySelectList = 
     productCategoryRepo.GetAll().Select(
      c => new SelectListItem { 
       Text = c.CategoryName, 
       Value = c.CategoryId.ToString() 
      } 
     ); 
} 

trên quan điểm của bạn, DropDownListFor html helper nên trông giống như một cái gì đó như thế này:

@Html.DropDownListFor(m => m.CategoryId, 
    (IEnumerable<SelectListItem>)ViewBag.ProductCategorySelectList 
) 
0

Sa mpat, Bởi thời gian tôi để lại câu trả lời này liên quan đến câu hỏi của bạn, tôi là cách nhiều hơn chắc chắn rằng bạn đang thực hiện với các ứng dụng của bạn và giải pháp của bạn là lên và chạy.

Nhưng tôi muốn để lại câu trả lời này cho những người vẫn đang tìm kiếm một cách tiếp cận rõ ràng, đơn giản và nhanh chóng.
Vì vậy, ở đây chúng tôi, cần phải điền một DropDownList với một vài mục.
Đối với phương pháp này, tôi sẽ sử dụng @Html.DropDownList theo quan điểm của tôi và để chuyển Dữ liệu cần thiết đến nó, tôi sẽ sử dụng phép thuật ViewBag trong bộ điều khiển của mình.

Dưới đây là bộ điều khiển của tôi chứa dữ liệu mà tôi cần phải cư DropDownList của tôi với:

public ActionResult Index() 
     { 
      List<SelectListItem> items = new List<SelectListItem>(); 
      items.Add(new SelectListItem 
      { 
       Text = "Option 1", 
       Value = "1" 
      }); 
      items.Add(new SelectListItem 
      { 
       Text = "Option 2", 
       Value = "2" 
      }); 
      ViewBag.DDLItems = items; 
      return View(); 
     } 

Như bạn thấy, tôi đã thực hiện một đối tượng List, và sau đó bổ sung thêm hai mục vào nó. Cuối cùng tôi qua tất cả các mục vào ViewBag của tôi mà tôi chỉ đơn giản gọi nó là DDLItems
Bây giờ cho phép xem làm thế nào để ràng buộc các mục cần @html.DropDownList trong Xem chúng tôi

@Html.DropDownList("DropDownListID", new SelectList(ViewBag.DDLItems, "Value", "Text"), "--- Please Choose an Item! ---") 

Như bạn có thể thấy phương pháp này rất dễ dàng, đáng tin cậy, nhanh chóng và sạch sẽ.

Hy vọng điều đó sẽ hữu ích.

Các vấn đề liên quan