2011-08-14 21 views
5

Tôi đã có một biểu mẫu đang đăng những gì có hiệu quả là một từ điển đối tượng để hành động điều khiển của tôi. Vì vậy, chúng tôi nhận được một IEnumerable<EditThemeAttributeModel>Tại sao hệ thống sản xuất chất kết dính mô hình mvc asp.net.string []

 public class EditThemeAttributeModel 
     { 
      public string Name { get; set; } 
      public object Value { get; set; } 
     } 

Khi tôi nhìn vào bộ sưu tập Request.Form tôi thấy những gì tôi mong đợi:

[1] "Attributes[0].Name" string 
    [2] "Attributes[0].Value" string 
    [3] "Attributes[1].Name" string 
    [4] "Attributes[1].Value" string 
    [5] "Attributes[2].Name" string 
    [6] "Attributes[2].Value" string 

Tuy nhiên, khi tôi cố gắng một nỗ lực để có được giá trị của một trong những EditThemeAttributeModel nó không phải là một kiểu đơn giản như tôi mong đợi, đó là một mảng chuỗi:

- Value {string[1]} object {string[]} 
       [0] "#ffffff" string 

tôi có thể làm việc này bằng cách sử dụng bộ sưu tập Request.Forms trực tiếp, nhưng chỉ muốn under và hành vi này.

Trả lời

4

Tất cả bài đăng từ các yêu cầu http, theo mặc định, các chuỗi. Vì bạn đang tham chiếu một đối tượng chứ không phải là một đối tượng đã gõ, nó mặc định là chuỗi bởi vì dữ liệu đến từ trình duyệt là một chuỗi. Nếu bạn muốn nó không phải là một chuỗi Tôi đề nghị bạn gõ đối tượng của bạn hoặc bạn có thể tạo chất kết dính mô hình của riêng bạn cho EditThemeAttributeModel.

+0

vâng tôi biết điều đó, nhưng đó không phải là câu hỏi. Câu hỏi đặt ra là tại sao trình mô hình tạo ra một mảng chuỗi 'string []' khi chúng ta truyền cho nó một tập hợp các đối tượng. –

+2

Bởi vì theo mặc định, bạn có thể bao gồm nhiều giá trị cho cùng một tên cho một giá trị bài đăng nhất định. 'id = 1 & id = 2 & id = 3' vì bạn không đặc biệt yêu cầu một' chuỗi' nhưng một đối tượng 'chất kết dính mô hình giả định nó có thể là một mảng vì nó không thể chuyển đổi trực tiếp thành kiểu. Việc tạo mảng là cuộc gọi cuối cùng của chất kết dính mô hình bởi vì về cơ bản nó không thể tìm ra những gì bạn thực sự muốn. Tôi muốn thu thập nó làm việc này chỉ để được an toàn. – Buildstarted

+0

Bạn có thể làm theo mã trình kết nối mô hình trong nguồn và xem tại sao chính xác nó đang làm những gì nó đang làm. Tôi đã làm điều này một lúc trở lại để trả lời một câu hỏi tương tự mà tôi đã có khi tạo một mô hình tự động chất kết dính. http://aspnet.codeplex.com/SourceControl/changeset/view/68345#266460 xem 'BindSimpleModel' (chuyển đổi thực tế nằm trong ValueProviderResult) – Buildstarted

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