{get;组;在ViewModel中使用

时间:2012-07-09 16:35:54

标签: asp.net-mvc razor

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

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

    public string Description { get; set; } 

但如果我有以下内容,则不会传回描述。描述显示为null

 public string Description  

为什么是         {get;组; }

这么重要吗?

4 个答案:

答案 0 :(得分:20)

我对asp.net MVC / Razor了解不多,但你的2个代码示例之间存在重大差异。

public string Description { get; set; }  

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

    private string _description;
    public string Description
    {
        get
        {
            return _description;
        }
        set
        {
            this._description = value;
        }
    }

但是以下内容:

public string Description;

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

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

答案 1 :(得分:8)

以下语法是C#语言功能'自动属性'。

public string Description { get; set; }

ASP.NET MVC使用reflectiondata-binding,它们只适用于属性而不适用于变量。使用属性进行公共访问是可行的方法。

建议阅读this文章,其中作者撤回了对公共财产的“不喜欢”。

答案 2 :(得分:1)

default model binder是将请求值绑定到模型中的属性的那个。它仅将值绑定到公共get-set属性,甚至不绑定到公共字段。

如果要将值绑定到字段,则必须编写自己的模型绑定器,但必须编写公共属性或优于公共字段,因此您不需要这样做。

答案 3 :(得分:1)

这是一个所谓的自动属性,基本上是以下的简写(类似的代码将由编译器生成):

private string name;
public string Name
{
    get
    {
        return this.name;
    }
    set
    {
        this.name = value;
    }
}