所以我有这个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;
}
}
}
为什么会这样?有没有办法让视图自动刷新,所以我不必找到引用该属性的每个视图并对视图进行更改?
答案 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的这一章也值得一读。