2011-10-03 29 views
5

Trong MVC2 tôi đã sử dụng để tạo các kiểu xem mạnh mẽ theo cách mà khi tôi đăng, tôi không bao giờ sử dụng đối tượng FormCollection. chữ ký của tôi luôn luôn trông giống như vậy:TryUpdateModel so với tham số phương pháp gõ mạnh

[AcceptVerbs(HttpVers.Post)] 
public Create(Person newPerson) 
{ 
//code to update the person from the post 
} 

Nhưng bây giờ tôi đang nhìn thấy điều này cách TryUpdateModel mới, nơi tôi sẽ chỉ cần viết một cái gì đó như:

[AcceptVerbs(HttpVers.Post)] 
    public Create() 
    { 
     Person thePersonToCreate = new Person() 
     TryUpdateModel(thePersonToCreate) 
     { 
      //Code to create the person if model is valid 
     }  
    } 

Vì vậy, bây giờ nó có vẻ như tôi phải giả lập HttpContext để kiểm tra phương pháp này. Tuy nhiên, có vẻ như tôi vẫn có thể sử dụng cách cũ bằng cách sử dụng phương pháp gõ mạnh mẽ. Tôi nhận ra rằng phương pháp TryUpdateModel là một cải tiến cho những người sẽ sử dụng phương pháp FormCollection để làm việc nhưng tại sao lại bận tâm với TryUpdateModel?

Trả lời

2

Có những trường hợp mà điều này là mong muốn. Một ví dụ điển hình là khi mô hình của bạn yêu cầu khởi tạo phức tạp hơn hoặc phương thức tạo nhà máy.

[AcceptVerbs(HttpVers.Post)] 
public Create() 
{ 
    var dataAccess = new MyDataAccess("Another Param"); 
    Person thePersonToCreate = new Person(dataAccess); 

    TryUpdateModel(thePersonToCreate) 
    { 
     //Code to create the person if model is valid 
    }  
} 

Bây giờ người ta có thể cho rằng một ModelBinder tùy chỉnh là giải pháp tốt hơn ở đây, nhưng có thể nỗ lực nhiều hơn giá trị nếu đây là một tình huống tắt. Ngoài ra, ẩn chi tiết này trong một ModelBinder làm cho các lỗi khó gỡ lỗi hơn.

Có những trường hợp khác mà tôi chắc chắn, nhưng đây chỉ là ví dụ nhanh.

2

Một số cũng sử dụng phương pháp đó khi bạn phải tải thông tin vào thực thể trước và hợp nhất các giá trị của bạn cho mục đích xác thực. Tuy nhiên, bạn có thể chỉ sử dụng automapper trong những trường hợp này nhưng một số công ty cấm mã nguồn mở.

Tôi cho rằng hầu như không ai sử dụng FormCollection trong một ứng dụng được cấu trúc tốt.

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