我使用C#与通过从控制器到该视图的视图模型一个ViewModel沿。
在我的视图模型,下面似乎像预期的那样它通过从视图回控制器描述信息的工作:
public string Description { get; set; }
但是,如果我有以下的,也不会传回的描述。 说明显示空
public string Description
为什么{获得; 组; }
很重要?
我使用C#与通过从控制器到该视图的视图模型一个ViewModel沿。
在我的视图模型,下面似乎像预期的那样它通过从视图回控制器描述信息的工作:
public string Description { get; set; }
但是,如果我有以下的,也不会传回的描述。 说明显示空
public string Description
为什么{获得; 组; }
很重要?
我不知道很多关于asp.net MVC /剃须刀,但你2的代码示例之间的一个重要区别。
public string Description { get; set; }
创建一个属性,编译一次,有在课堂上生成的私人领域,与访问字段get / set方法。 与声明的属性{获得;设置;}是等价的:
private string _description;
public string Description
{
get
{
return _description;
}
set
{
this._description = value;
}
}
但是以下几点:
public string Description;
创建一个简单的公共领域。
我的猜测是,剃须刀使用反射来从视图模型得到的值,它可能会寻找一个属性,而不是场。 因此,确定该属性不存在,因此返回null
下面的语法是C#语言的功能“自动属性”。
public string Description { get; set; }
ASP.NET MVC使用reflection
和data-binding
只与性质,而不是变量的工作。 使用性质为公共访问是要走的路。
推荐阅读此文章在这里笔者收回了他的“不喜欢”的公共属性。
该default model binder
是结合该请求值到在模型的属性之一。 只绑定到公共的get-设置属性 ,甚至不公开字段中的值。
如果您想将值绑定到字段,那么你必须编写自己的模型绑定,但公共属性或好于公共领域,所以你不需要这个。
这是一个所谓的自动性,本质上是下面的(类似的代码会被编译器生成)的缩写:
private string name;
public string Name
{
get
{
return this.name;
}
set
{
this.name = value;
}
}