asp.net mvc: Каковы преимущества привязки моделей по сравнению с назначениями вручную? - PullRequest
2 голосов
/ 15 апреля 2009

Помимо того, что кода для написания меньше, каковы преимущества? Это более безопасно?

public JsonResult Update (int id, string name)
{
 Person person = new Person{ 
      ID=id,
      Name=name
 }

 SavePerson(person);
 return Json(...);
}

OR

public JsonResult Update (Person person)
{

SavePerson(person);
return Json(...);

 } 

Ответы [ 2 ]

1 голос
/ 15 апреля 2009

Я вынужден не согласиться с Ником в отношении значений, заканчивающихся в строке URL. На самом деле, нет никакой разницы. Попытайся! Параметры строки запроса могут предоставлять значения модели любым методом.

Другое различие, которое, возможно, является существенным, заключается в том, что при передаче идентификатора и имени в качестве аргументов это единственные два поля, которые могут быть обновлены. При передаче Person в качестве аргумента потенциально другие поля могут быть обновлены. Это может или не может быть то, что вы хотите. Но UpdateModel примет белый список свойств, которые вы хотели бы обновить (и аналогично для привязки экземпляра Person в аргументе), поэтому , если вы помните, что нужно включить белый список , реального Разница здесь.

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

1 голос
/ 15 апреля 2009

При использовании подхода (int id, string name) возможно, что эти значения окажутся в строке URL. С другой стороны, это не так. Так что это может считаться более безопасным.

Кроме этого, если вы измените возможные свойства в своем классе Person, вам не придется обновлять значения, передаваемые в подход (int id, string name). Хотя вы можете обойти это, используя UpdateMethod (myPersonInstance).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...