在我的.NET MVC项目中,我有一个名为User的模型,当我在剃刀视图中时,该类与System.Security.Principal.IPrincipal.WebPageRenderingBase.User冲突。 (并且仅在剃刀视图内)。
有没有办法给我的班级一个不同的全局别名?或者更好的是,阻止这个.NET类出现?
我不想要一个冗长的解决方案。 (前缀)有没有办法让remvoe引用这个愚蠢的用户属性?
这是每个人的常见问题还是我的设置有问题?
答案 0 :(得分:12)
只需将模型类从User
重命名为Person
即可。每个解决方案都会以不必要的复杂性使您的代码膨胀。
其他事情:
如果您使用名为User
99%的类确定您在视图中使用模型,那么最佳方法是使用ViewModel,您可以在其中收集传递到视图所需的所有数据。因此,在视图中,User将成为此ViewModel的一个属性。
这种方法也可以帮助您根除ViewBags和类似的......
答案 1 :(得分:4)
完全符合你的班级资格,即
MyNamespace.Core.User
而不是
User
虽然我有点困惑,因为
System.Security.Principal.IPrincipal.WebPageRenderingBase.User
IPrincipal
类型的属性不是名为User
答案 2 :(得分:4)
我通常会做以下事情:
using m = MyProject.MyNameSpace.MySubNameSpace;
var u = new m.User();
答案 3 :(得分:4)
@devlife与@Romias的回答有点混合。
通过实施using
别名,您可以将User
类“重命名”(在此文件中已定义),将其重命名为using
语句中指定的内容。
例如:
using Person = NameSpace.SubNameSpace.Classes.User
然后,您可以在定义此别名的文件中使用Person
作为User
类。
请参阅:http://msdn.microsoft.com/en-us/library/sf0df423(v=vs.71).aspx
最后一节提供了完整的代码示例。
答案 4 :(得分:1)
也许伟大的Jon Skeet有你的答案:
“What use is the Aliases property of assembly references in Visual Studio 8”:
这是针对“外部别名”。假设你想要使用两种不同的 类型,两者都被称为Foo.Bar(即名称空间中的Bar 富)。这两种类型将在不同的组件中(根据定义) - 您使用VS中的属性将别名与每个引用相关联, 那么你可以这样做:
extern alias FirstAlias; extern alias SecondAlias; using FirstBar = FirstAlias::Foo.Bar; using SecondBar = SecondAlias::Foo.Bar;
然后在代码中使用FirstBar和SecondBar。
所以基本上它是一个额外的命名级别 - 你不应该使用它 除非你真的,真的要。这会让很多人感到困惑。 尽量避免首先进入这种情况 - 但是 在那些你无法避免的时候意识到这个解决方案。