1

在我的 .NET MVC 项目中,我有一个名为 User 的模型,当我在剃刀视图中时,它的类与 System.Security.Principal.IPrincipal.WebPageRenderingBase.User 冲突。(并且仅在剃刀视图内)。

有没有办法给我的班级一个不同的全局别名?或者更好的是,阻止这个 .NET 类出现?

我不想要一个冗长的解决方案。(前缀)有没有办法删除对这个愚蠢的用户属性的引用?

这是每个人的常见问题还是我的设置有问题?

4

5 回答 5

12

只需将您的模型类从 重命名UserPerson。每个解决方案都会以不必要的复杂性使您的代码膨胀。

另一件事:如果您使用名为User99% 的类,则可以确定您在视图中使用模型,最好的方法是使用 ViewModel,您可以在其中收集需要传递给视图的所有数据。因此,在视图中,用户将成为该视图模型的一个属性。

这种方法还可以帮助您消除使用 ViewBags 和类似...

于 2013-06-25T02:50:38.080 回答
4

完全符合您的课程,即

MyNamespace.Core.User

而不仅仅是

User

虽然我有点困惑,因为

System.Security.Principal.IPrincipal.WebPageRenderingBase.User

是类型的属性而IPrincipal不是称为的类型User

于 2013-02-22T21:25:31.643 回答
4

我通常会执行以下操作:

using m = MyProject.MyNameSpace.MySubNameSpace;

var u = new m.User();
于 2013-06-25T02:33:42.490 回答
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

最后一节提供了一个完整的代码示例。

于 2013-06-28T08:13:05.333 回答
1

也许伟大的 Jon Skeet 有你的答案:

Visual Studio 8 中程序集引用的 Aliases 属性有什么用”:

这是针对“外部别名”的。假设您要使用两种不同的类型,它们都称为 Foo.Bar(即 Foo 命名空间中的 Bar)。这两种类型将位于不同的程序集中(根据定义) - 您使用 VS 中的属性将别名与每个引用关联,然后您可以执行以下操作:

extern alias FirstAlias;
extern alias SecondAlias;

using FirstBar = FirstAlias::Foo.Bar;
using SecondBar = SecondAlias::Foo.Bar;

然后在您的代码中使用 FirstBar 和 SecondBar。

所以基本上它是一个额外的命名级别——除非你真的、真的必须这样做,否则你不应该使用它。它会让很多人感到困惑。一开始就尽量避免陷入这种情况——但在你无法避免的时候要注意这个解决方案。

于 2013-06-25T01:42:02.683 回答