2010-01-30 66 views
5

tôi có 2 tài sản trong ViewModel của tôiASP.NET MVC ViewModel và DropDownList

class ViewModel1 
{ 
    Dictonary<int, string> PossibleValues {get;set;}//key/value 
    int SelectedKey {get;set} 
} 

Tôi muốn chỉnh sửa này sử dụng một Html.DropDownListFor

Tôi muốn nhận MVC để tự động sắp đặt từng hàng dữ liệu vào/từ ViewModel để tôi có thể sau

public ActionResult Edit(ViewModel1 model) ... 

Cách tốt nhất để thực hiện việc này là gì?

+0

Bạn đang sử dụng ASP.NET MVC phiên bản 1 hoặc 2? –

+0

Tôi đang sử dụng phiên bản 2 – jameszhao00

Trả lời

11

Như womp nói, trình duyệt sẽ chỉ nộp giá trị được chọn trong danh sách thả xuống. Điều này dễ bị ràng buộc bởi chất kết dính mô hình mặc định, xem bên dưới.

Nếu bạn không chỉnh sửa danh sách PossibleValues ​​trên máy khách thì không cần phải gửi lại chúng. Nếu bạn cần phải repopulate danh sách sau đó làm điều đó phía máy chủ trong hành động bài của bạn bằng cách sử dụng cùng một phương pháp bạn ban đầu dân cư từ điển với.

Ví dụ trong bạn page:

<%@ Page Language="C#" Inherits="System.Web.Mvc.ViewPage<ViewModel1>" %> 
<!-- some html here --> 
<%= Html.DropDownListFor(x => x.SelectedKey, new SelectList(Model.PossibleValues, "key", "value"))%> 

Trong điều khiển của bạn

[AcceptVerbs(HttpVerbs.Get)] 
public ViewResult Edit() { 
var model = new ViewModel1 { 
    PossibleValues = GetDictionary() //populate your Dictionary here 
}; 
return View(model); 
} 

[AcceptVerbs(HttpVerbs.Post)] 
public ViewResult Edit(ViewModel1 model) { //default model binding 
    model.PossibleValues = GetDictionary(); //repopulate your Dictionary here 
    return View(model); 
} 

đâu GetDictionary() là một phương thức trả về đối tượng từ điển dân cư của bạn.

See this similar question for more details

0

Tôi không nghĩ bạn có thể xây dựng từ điển từ danh sách thả xuống trên biểu mẫu. Danh sách thả xuống sẽ chỉ đăng một giá trị trở lại mà bạn có thể đặt làm thuộc tính SelectedKey của mình, nhưng bạn sẽ không thể tạo lại từ điển PossibleValues từ đó.

Để xây dựng lại từ điển, bạn sẽ cần phải có một trường biểu mẫu cho mọi mục nhập trong đó. Bạn có thể làm điều gì đó như thế này, được tạo bằng vòng lặp foreach qua từ điển của bạn:

<input type="hidden" name="PossibleValues[0].Key" value="key0"> 
<input type="hidden" name="PossibleValues[0].Value" value="value0"> 
<input type="hidden" name="PossibleValues[1].Key" value="key1"> 
<input type="hidden" name="PossibleValues[1].Value" value="value1"> 
. 
. 
. 

Cuối cùng tôi sẽ đặt câu hỏi cần phải điền lại từ điển từ biểu mẫu. Nếu họ chỉ có thể chọn một giá trị, tại sao PossibleValues ​​không phải là một tra cứu từ một nơi nào đó bên ngoài ViewModel của bạn (như trong kho lưu trữ của bạn?) Tại sao lưu nó với ViewModel?

0

Các giải pháp được tùy chỉnh ModelBinding trong ASP.NET MVC framework đây là một số ví dụ ..

stevesmithblog.com/blog/binding-in-asp-net-mvc

www.singingeels.com/ Giới thiệu/Model_Binders_in_ASPNET_MVC.aspx

odetocode.com/Blogs/scott/archive/2009/04/27/12788.aspx

odetocode.com/Blogs/scott/archive/2009/05/05/12801. aspx

hy vọng bạn tìm thấy chúng hữu ích ...

Cảm ơn