两个对象的属性是自动实现的,而不是访问者

时间:2014-03-26 17:33:41

标签: c# asp.net-mvc properties model-binding

两个对象,这些对象定义有何区别?这让我感动了一段时间,因为这个特定对象被用作MVC控制器动作的参数,当视图中的值被POST时,第一个版本能够将绑定模型绑定到返回的值。第二个没有。

//version 1
public class SecurityViewModel
{
    public string Identifier { get; set; }
    public string CrdId { get; set; }
}

// version 2
public class SecurityViewModel
{
    public string Identifier;
    public string CrdId;
}

使用任何一个版本我仍然可以

SecurityViewModel mymodel = new SecurityViewModel();
mymodel.Identifier = "this";
mymodel.CrdId = "that";

所以很明显,即使没有自动实现的get和set,我仍然可以获取并设置属性的值。

...然而

版本1具有自动实现的属性,版本2只具有声明的属性。两者都允许您在创建对象时设置/获取这些属性的值,但版本1 是唯一可以在定义为...的控制器方法上使用模型绑定的

public ActionResult Index(SecurityViewModel myModel)

任何人都可以详细说明这个吗?

1 个答案:

答案 0 :(得分:2)

MVC绑定属性。第二个版本:

public class SecurityViewModel
{
    public string Identifier;
    public string CrdId;
}

使用fields,而非属性。

另见What is the difference between a Field and a Property in C#?