报错:'DevA.Models.Order'是命名空间却被当作类型使用如何解决
报错原因
- 问题根源为命名空间与类名重名冲突:你的项目中存在
DevA.Models.Order命名空间(通常是因为在DevA/Models目录下创建了名为Order的文件夹,C#默认将文件夹层级作为命名空间的组成部分),和你定义的DevA.Models.Order实体类名称完全一致,编译器优先匹配到了命名空间,因此抛出“是命名空间但被当作类型使用”的错误。
解决方案
以下三种方案任选其一即可:
- 方案1:修改实体类名
将Order类重命名为不会冲突的名称,比如OrderInfo、OrderModel,同步修改视图中泛型参数的类名即可:
// Model类修改 namespace DevA.Models { public class OrderInfo { // 原有属性保持不变 [Key] public int OrderID { get; set; } [Required] public DateTime OrderDate { get; set; } [ForeignKey("CustomerID")] public Customer Customer { get; set; } [Required] [MaxLength(50)] public string CustomerName { get; set; } [Required] [MaxLength(25)] public string ShipCountry { get; set; } [Required] [MaxLength(25)] public string ShipCity { get; set; } } } // 视图修改 @(Html.DevExtreme().DataGrid<DevA.Models.OrderInfo>() // 其余配置保持不变 )
- 方案2:修改冲突的命名空间
如果是Models下的Order文件夹导致的命名空间冲突,可将该文件夹重命名,或是手动修改该文件夹下所有类的命名空间,避免使用DevA.Models.Order作为命名空间前缀。 - 方案3:添加全局标识强制识别为类型
不需要修改名称的前提下,可在视图中给类名添加global::前缀,强制编译器将其识别为全局类型而非命名空间:
@* 仅需要修改视图中的泛型参数部分,其余代码保持不变 *@ @(Html.DevExtreme().DataGrid<global::DevA.Models.Order>() .DataSource(ds => ds.Mvc() .Controller("Order") .LoadAction("Get") .InsertAction("Post") .UpdateAction("Put") .DeleteAction("Delete") .Key("OrderID") ) // 其余配置保持不变 )
内容的提问来源于stack exchange,提问作者peemapod neamkur
相关产品推荐
相关产品推荐

