2012-06-22 21 views
8

Tôi có một ViewModel Tôi gắn vào một cái nhìn:ASP.NET MVC là cách tốt hơn để đăng ID mô hình?

ProductViewModel model = Mapper.Map<Product, ProductViewModel>(product); 
return View(model); 

Quan điểm (và viewmodel) được sử dụng để chỉnh sửa một Product nên ProductViewModel có một tài sản ID tương ứng với ID trong cơ sở dữ liệu.

Và để Đăng ID trở lại để điều khiển tôi đang làm điều này trong hình thức của tôi về quan điểm:

@Html.HiddenFor(x => x.Id) 

Mặc dù này hoạt động - Tôi đã tự hỏi liệu có một cách tốt hơn để Đăng sự ID trở lại Controller? Giá trị tuyến đường có thể? hay đây là một mô hình/cách tiếp cận khá chuẩn?

Trả lời

11

Nếu tôi có một hành động GET bao gồm id trong lộ trình của tôi: /Products/Edit/1 sau đó tôi thường giữ nó như là một giá trị tuyến đường:

[HttpPost] 
public ActionResult Edit(int id, EditProductViewModel model) 

Đây hoàn toàn là một sở thích của tôi, mặc dù. Không có cách đúng hay sai để làm điều đó.

Điều tuyệt vời về phương pháp này là bạn không còn cần phải chuyển nó bằng cách sử dụng giá trị Ẩn vì nó là một phần của URL. Trên thực tế, nếu bạn vượt qua nó với một giá trị ẩn Tôi tin rằng nó sẽ bị bỏ qua.

Ngoài ra, kể từ id là một phần của tuyến đường này, bạn thậm chí không cần phải có một thông số riêng biệt:

[HttpPost] 
public ActionResult Edit(EditProductViewModel model) 

public class EditProductViewModel 
{ 
    public int Id { get; set; } 
} 

Một lần nữa, điều này hoàn toàn là một điều ưu tiên.

+0

Tôi không nghĩ rằng các trường ẩn được bỏ qua, chúng dường như được ánh xạ tới đối tượng mô hình giống như một trường hiển thị. – Greg

+0

@Greg Tôi có nghĩa là nếu bạn có một trường ẩn được gọi là 'id' và bạn có giá trị tuyến đường được gọi là' id' thì giá trị tuyến đường sẽ giành được. – Dismissile

+0

Ah đúng rồi, tôi có ya! – Greg

1

Tôi nghĩ câu trả lời là tùy thuộc.

toàn bộ đối tượng của bạn đang được chỉnh sửa và đăng lại chưa? Nếu vậy, tôi khuyên bạn nên đăng lại ID như một phần của mô hình:

[HttpPost] 
public ActionResult Edit(EditProductViewModel model) 

Tôi nghĩ đó là điều hoàn toàn hợp lệ để làm. Tuy nhiên hãy cẩn thận. Nếu tài nguyên đang được chỉnh sửa là tài nguyên được bảo vệ, hãy đảm bảo bạn xác thực người dùng có các đặc quyền chính xác.

Nếu đó là một chỉnh sửa một phần, có lẽ chỉ cần chỉnh sửa một bình luận thông qua một cuộc gọi Ajax tôi có lẽ muốn bị cám dỗ nhiều việc phải làm:

[HttpPost] 
public ActionResult Edit(int id, string comment) 

dưới dạng khi tạo mẫu trong kịch bản mà tôi sẽ thấy như quá mức cần thiết .. . vấn đề đặc quyền vẫn được áp dụng mặc dù :)

Tất cả những gì đang được nói, tôi không có chuyên môn bản thân mình :)

Ngẫu nhiên ... tôi không nghĩ rằng có bất cứ điều gì sai trái với lĩnh vực ẩn, tôi sử dụng nó tất cả thời gian. Tuy nhiên đó là một cuộc gọi ajax nó có thể không cần thiết vì nó sẽ là một phần của cuộc gọi ajax gửi bài của bạn.

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