2010-08-03 2 views
3

У меня есть следующие модели:ASP.NET MVC 2 Создание модели с помощью POST

public class Product { 
public int Id { get; set; } 
public string Name { get; set; } 
private int CategoryId { get; set; } 
public Category Category { get; set; } 
public string InventoryDetails { get; set; } 
} 

У меня есть действие в мой контроллер, который используется для создания нового продукта. Мой вопрос заключается в том, как ограничить свойства моей модели, которые могут быть связаны с данными POST? Потому что я хочу, чтобы только имя и CategoryId были связаны данными пользователя POST. Или лучше создать отдельную модель просмотра, которая может связывать только эти свойства?

public ActionResult Create(Product p) 

или

public ActionResult Create(CreateProductViewModel model) 

где

public class CreateProductViewModel { 
public string Name {get; set;} 
public int CategoryId {get;set;} 
} 

ответ

7

Переход с модели представления. Это отменит ваше представление из модели данных. Как вы обнаружили, они не всегда имеют одинаковые потребности, и модель должна быть специфичной для представления. Вы можете сопоставить свойства вручную или использовать AutoMapper для более сложных сценариев.

0

Или вы можете сделать что-то вроде этого:

public ActionResult Create (FormCollection collection) { 
    Product p = new Product(); 
    UpdateModel(p, new string[] { "Name", "CategoryId" }); 
    //.... 
} 
+0

Но из-за использования «магических» струн вы потеряли способность к рефакторингу и безопасности. – Ryan

+0

Не совсем, вы всегда можете перечислить их, если хотите, или сохранить их в постоянных переменных. Я просто предоставляю варианты. –

0
public ActionResult Create([Bind(Exclude = "Category,Id,InventoryDetails")]Product prod){ 

/*do your magic*/ 

} 

ASP.NET MVC модель по умолчанию связующий исключит ненужные поля.

примечание: если ваш формат данных представления почти равен модели данных, создание отдельной модели представления не является хорошей практикой. Создайте отдельную модель представления, только если два разных.

Смежные вопросы