asp.net mvc:模型绑定比手动分配有什么优势?

时间:2009-04-14 22:13:04

标签: asp.net-mvc

除了编写的代码较少外,还有哪些优点?它更安全吗?

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 个答案:

答案 0 :(得分:1)

使用(int id,string name)方法时,这些值可能最终会出现在URL字符串中。另一方面,它不会。所以,这可能被认为更安全。

除此之外,如果更改Person类中的可能属性,则不必更新传入(int id,string name)方法的值。虽然,您可以通过使用UpdateMethod(myPersonInstance)来解决这个问题。

答案 1 :(得分:1)

我必须不同意Nick关于以URL字符串结尾的值的概念。事实上,没有区别。试试吧!查询字符串参数可以使用任一方法提供模型值。

另一个可能很重要的区别是,当将ID和name作为参数传递时,这些是唯一可以更新的两个字段。传递Person作为参数时,可能会更新其他字段。这可能是也可能不是你想要的。但UpdateModel将接受您希望更新的属性的白名单(并且类似于在参数中绑定Person实例),所以只要您记得考虑包括白名单,就没有真正的区别在这里。

对我而言,您展示的两个选项之间的最大区别是谁实例化Person实例。当您将ID和name作为参数传递时,它将始终是您实例化Person的控制器代码。当您将Person作为参数传递时,它将始终是实例化Person的模型绑定器。如果您希望从存储库中实现现有实例,而不是实例化新的Person实例,那么这可能很重要。