2011-11-01 23 views
5

Tôi biết câu hỏi tis đã được hỏi khá allot trên SO.ListBoxFor không ràng buộc viewmodel của tôi

herehere

Nhưng tôi vẫn không thể tìm ra vấn đề.

Tôi đang phát triển một blog để tự dạy mình khuôn khổ MVC. Bây giờ khi tôi đăng xem dưới đây, ListBoxFor helper không ràng buộc bất kỳ giá trị nào cho mô hình của tôi. Danh sách thành công chứa tất cả các danh mục nhưng khi trình điều khiển POST nhận lại mô hình khung, đối tượng Categories là null.

Đây là Xem mẫu:

public class PostViewModel 
{ 
    public Post Posts { get; set; } 
    public IEnumerable<Category> Categories { get; set; } 
} 

Controller:

public ActionResult Create() 
    { 
     PostViewModel post = new PostViewModel(); 
     post.Categories = db.ListCategories(); 
     return View(post); 
    } 

The View:

<p>@Html.ListBoxFor(model => model.Categories, new MultiSelectList(Model.Categories, "CategoryID", "CategoryName"))</p> 
+0

Bạn có nhận được giá trị rỗng trong hành động POST hoặc khi bạn cố gắng hiển thị cùng một chế độ xem sau hành động POST không? – epzee

Trả lời

9

Tôi tin rằng bạn nên có một tài sản mảng trong mô hình quan điểm của bạn mà các ID đã chọn sẽ liên kết với.

public class PostViewModel 
{ 
    public Post Posts { get; set; } 
    public int[] SelectedCategoryIds { get; set; } 
    public IEnumerable<Category> Categories { get; set; } 
} 

Và thay đổi số Html.ListBoxFor gọi cho thuộc tính SelectedCategoryIds.

<p>@Html.ListBoxFor(model => model.SelectedCategoryIds, new MultiSelectList(Model.Categories, "CategoryID", "CategoryName"))</p> 

Là một sang một bên: Bây giờ bạn đang tạo một hộp danh sách cho SelectedCategoryIds tài sản, nếu bạn có một nhãn cho danh sách các bạn nên thay đổi này được cho SelectedCategoryIds sở hữu quá.

@Html.LabelFor(model => model.SelectedCategoryIds, "Categories") 

("Categories" là nội dung nhãn)

+0

+1 Điều này thực sự giúp tôi có được một vài khái niệm viewmodel – PhilPursglove

+0

@fsmmu PostViewModel của bạn không nên bọc danh sách Danh mục là các mô hình miền. – Elisabeth

2

Không phải 100% chắc chắn nếu tôi hiểu câu hỏi của bạn; nhưng mã này có giúp ích gì không? Nó cho thấy cách bạn có thể tìm kiếm các danh mục nào được chọn khi đăng biểu mẫu trở lại máy chủ.

[HttpPost] 
public ActionResult Create(Post post, FormCollection formCollection) 
{ 
    var listOfCategoryIDs = formCollection["categories"]; 
    var arrayOfCategoryIDs = listOfCategoryIDs.Split(','); 
} 
Các vấn đề liên quan