{get; 组; 在ViewModel中使用

Nat*_*Pet 13 asp.net-mvc razor

我正在使用c#以及将视图模型从控制器传递到视图的ViewModel.

在我的视图模型中,以下似乎按预期工作,因为它将描述信息从视图传递回控制器:

    public string Description { get; set; } 
Run Code Online (Sandbox Code Playgroud)

但是,如果我有以下内容,它将不会传回描述.描述显示为null

 public string Description  
Run Code Online (Sandbox Code Playgroud)

为什么{得到; 组; }

很重要?

Jf *_*lac 20

我不太了解asp.net MVC/Razor,但是你的2个代码示例之间有一个重要的区别.

public string Description { get; set; }  
Run Code Online (Sandbox Code Playgroud)

创建一个属性,一旦编译,该类中就会生成一个私有字段,并使用get/set方法访问该字段.使用{get; set;}声明的属性相当于:

    private string _description;
    public string Description
    {
        get
        {
            return _description;
        }
        set
        {
            this._description = value;
        }
    }
Run Code Online (Sandbox Code Playgroud)

但是以下内容:

public string Description;
Run Code Online (Sandbox Code Playgroud)

创建一个简单的公共字段.

我的猜测是剃刀使用反射从ViewModel获取值,它可能会查找属性,而不是字段.因此它确定该属性不存在,因此返回null


Cha*_*nns 8

以下语法是C#语言功能"自动属性".

public string Description { get; set; }
Run Code Online (Sandbox Code Playgroud)

ASP.NET MVC使用reflection并且data-binding仅使用属性而不是变量.使用属性进行公共访问是最佳选择.

建议阅读这篇文章,作者撤回了他对公共财产的"厌恶".