2010-01-28 78 views
8

Tôi hiện đang phát triển một ứng dụng với khung công tác ASP.NET MVC2 mới. Ban đầu tôi bắt đầu viết ứng dụng này trong ASP.NET MVC1 và tôi về cơ bản chỉ cập nhật nó lên MVC2.Cách thích hợp để sử dụng FormCollection trong ASP.NET MVC2 Create Method?

Vấn đề của tôi ở đây là, tôi không thực sự có khái niệm về đối tượng FormCollection so với đối tượng Kiểu cũ.

Đây là mã hiện tại của tôi:

[AcceptVerbs(HttpVerbs.Post)] 
public ActionResult Create(FormCollection collection) 
{ 
    try 
    { 
     Member member = new Member(); 
     member.FirstName = collection["FirstName"]; 
     member.LastName = collection["LastName"]; 
     member.Address = collection["Address"]; 

     // ... 

     return RedirectToAction("Details", new { id = member.id }); 
    } 
    catch 
    { 
     return View("Error"); 
    } 
} 

Đây là Bộ luật từ các ứng dụng MVC1:

[AcceptVerbs(HttpVerbs.Post)] 
public ActionResult Create(Member member) 
{ 
    try 
    { 
     memberRepository.Add(member); 
     memberRepository.Save(); 

     return RedirectToAction("Details", new { id = member.id }); 
    } 
    catch 
    { 
    } 
    return View(new MemberFormViewModel(member, memberRepository)); 
} 

những lợi ích của việc chuyển đổi sang FormCollection trong MVC2 và quan trọng hơn là gì - làm thế nào là nó sử dụng đúng cách?

+0

Tôi không thấy gì, mô hình cũ có bị hỏng không? Tại sao chuyển đổi? – mxmissile

+0

Không có nó không bị hỏng .. nó đã được tìm kiếm như mô hình cũ cách tiếp cận mạnh mẽ gõ đã bị bỏ rơi như bộ điều khiển mới đi kèm với một FormCollection thay vì một đối tượng mạnh mẽ đánh máy. –

Trả lời

11

Bạn cũng có đối tượng FormCollection trong v1. Nhưng nó được ưa thích hơn để sử dụng một đối tượng đã gõ. Vì vậy, nếu bạn đã làm điều đó, sau đó tiếp tục làm như vậy.

+1

+1 Có, FormCollection đã xuất hiện ngay từ đầu. Nếu nó không bị hỏng, đừng sửa nó! –

0

Bằng cách sử dụng FormCollection, bạn sẽ kết hợp thủ công dữ liệu bài đăng hoặc chuỗi khóa/giá trị truy vấn vào các giá trị để sử dụng trong mã của bạn bằng cách nhập chuỗi (kết quả là mã được nhập kiểu chuỗi), khi thay vào đó làm điều này cho bạn nếu bạn sử dụng các mẫu biểu mẫu, còn gọi là "các đối tượng đã nhập".

Tôi nghĩ rằng bằng cách sử dụng FormCollection, bạn cũng có thể mất khả năng sử dụng các chú thích dữ liệu tiện dụng (các thuộc tính slash Validation) trên các đối tượng mô hình của bạn.

Ngoài ra, kiểm tra đơn vị có thể trở nên rườm rà hơn nhiều khi bạn bắt đầu chạm vào bộ điều khiển của mình.Request.Form. Bạn có thể thấy mình phải giả lập và thiết lập một HttpContextBase và một HttpRequestBase chỉ để có thuộc tính .Form của yêu cầu giả định đó trả về NameValueCollection mà bạn muốn thử nghiệm của mình xem. Tương phản điều này để cho phép mô hình ràng buộc thực hiện công việc cho bạn như:

// Arrange 
    var myModel = new MyModel(Property1 = "value1", Property2 = "value2"); 
    // Act 
    var myResult = myController.MyActionMethod(myModel); 
    // Assert 
    // whatever you want the outcome to be 

Tóm lại, tôi khuyên bạn nên sử dụng FormCollection đến mức tối đa có thể.

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