封装属性后,Razor视图停止工作

时间:2017-09-07 17:43:25

标签: c# asp.net-mvc razor visual-studio-2015

所以我有这个C#MVC项目,在Razor中有一些视图。

如果我将模型中的现有字段更改为属性或反之亦然,则引用此字段的任何Razor视图都会停止工作,并且在运行时会收到System.MissingFieldException,即使该字段仍然存在。该视图仅在我对其进行任何更改时才会再次起作用,例如在某处添加一个空白区域。例如,

如果我改变了这个:

public class Test
{
   public List<string> myStrings = new List<string>();
}

To This:

public class Test
{
    private List<string> _myStrings = new List<string>();

    public List<string> myStrings
    {
        get
        {
            return _myStrings;
        }
        set
        {
            _myStrings = value;
        }
    }
}

为什么会这样?有没有办法让视图自动刷新,所以我不必找到引用该属性的每个视图并对视图进行更改?

1 个答案:

答案 0 :(得分:0)

Test类是否位于不同的项目/类库中。 重建解决方案一次,因为Changing a field into a property is a breaking change (MSDN)。将字段更改为属性时,编译器不会抛出错误,因为property的使用语法与field相同。但在内部他们是不同的东西。为属性和字段生成不同类型的MSIL签名(通过第一个链接)。从客户端调用属性作为方法调用。

Jon Skeet的“C#in Depth”一书中关于Why Properties Matter的这一章也值得一读。