ASP.NET MVC 2 Создать модель с помощью POST - PullRequest
3 голосов
/ 03 августа 2010

У меня есть следующая модель:

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?Потому что я хочу, чтобы только Name и 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;}
}

Ответы [ 4 ]

7 голосов
/ 03 августа 2010

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

1 голос
/ 04 августа 2010

Всегда используйте ViewModel.Используя ViewModel, гораздо проще согнуть вашу модель данных в соответствии с потребностями представления.Вот классная статья Джимми Богарда.

http://www.lostechies.com/blogs/jimmy_bogard/archive/2009/06/29/how-we-do-mvc-view-models.aspx

0 голосов
/ 04 августа 2010
public ActionResult Create([Bind(Exclude = "Category,Id,InventoryDetails")]Product prod){

/*do your magic*/

}

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

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

0 голосов
/ 03 августа 2010

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

public ActionResult Create (FormCollection collection) {
    Product p = new Product();
    UpdateModel(p, new string[] { "Name", "CategoryId" });
    //....
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...