Bạn hy vọng có được lợi ích gì từ việc sử dụng loại động ở đây?
Sử dụng từ điển ViewData là cách rất dễ dàng để thêm các đối tượng/mục tùy ý vào đầu ra của chế độ xem của bạn.
Bạn không cần phản ánh để có được tên thuộc tính trong Chế độ xem của mình. Chỉ cần sử dụng ViewData.Keys
để lấy bộ sưu tập tên.
Chỉnh sửa: Tôi vừa học thêm một chút về động lực bản thân và tôi nghĩ có thể bạn cần tạo lớp đối tượng động của riêng bạn kế thừa từ DynamicObject. Bạn sẽ muốn có một từ điển riêng tư trong lớp đó và sau đó ghi đè lên TrySetMember
và TryGetMember
.
Chỉnh sửa Bên cạnh: Tôi nghĩ một lợi thế của một ViewModel được đánh máy mạnh là bạn có thể chấp nhận nó như một tham số trong phương thức POST hành động của bạn. Khung MVC sẽ xử lý ràng buộc mô hình và trong phương thức hành động, bạn chỉ đơn giản là có một cá thể của lớp ViewModel của bạn. Tôi không nghĩ rằng bạn sẽ có lợi thế đó với một động lực ngay cả khi họ làm việc.
Chỉnh sửa kết quả: Vâng, tôi đã thử sử dụng lớp học có nguồn gốc từ DynamicObject, nhưng VS2010 gặp sự cố khi cố gắng hiển thị chế độ xem. Tôi không nhận được bất kỳ ngoại lệ, chỉ là một vụ tai nạn cứng và Visual Studio khởi động lại. Đây là mã tôi đã nghĩ ra là nguyên nhân gây ra sự cố.
Các lớp tùy chỉnh năng động:
public class DynViewModel : DynamicObject
{
private Dictionary<string, object> ViewDataBag;
public DynViewModel()
{
this.ViewDataBag = new Dictionary<string, object>();
}
public override bool TrySetMember(SetMemberBinder binder, object value)
{
this.ViewDataBag[binder.Name] = value;
return true;
}
public override bool TryGetMember(GetMemberBinder binder, out object result)
{
result = this.ViewDataBag[binder.Name];
return true;
}
}
Trong bộ điều khiển:
public ActionResult DynamicView()
{
dynamic p = new DynamicViewModel.Models.DynViewModel();
p.Name = "Test";
p.Phone = "111-2222";
return View(p);
}
Quan điểm của tôi về cơ bản là giống như những gì được liệt kê trong câu hỏi:
<p>Name: <%=Model.Name %></p>
<p>Phone: <%=Model.Phone %></p>
My Kết luận: Điều này có thể hiệu quả, nhưng trong bản Beta 1 của VS2010 tôi không thể tìm ra lý do tại sao mã của tôi khiến Visual Studio bị lỗi. Tôi sẽ thử lại trong VS2010 Beta 2 khi nó được phát hành vì nó là một bài tập thú vị trong việc học về động lực học. Tuy nhiên, ngay cả khi điều này là để làm việc, tôi vẫn không thấy bất kỳ lợi thế hơn bằng cách sử dụng từ điển ViewData.
Phil Haack để giải cứu! Đây là bài đăng trên blog của Phil Haack có thể giúp bạn. Có vẻ như đó là những gì bạn đang tìm kiếm. Fun With Method Missing and C# 4
Bạn có thể đăng thêm mã của mình không? Tôi muốn đặc biệt để xem các nhà xây dựng để xem – Randolpho
Kiểm tra cập nhật mới nhất của tôi với một liên kết đến bài đăng blog của Phil Haack. – CoderDennis