C# asp.net常见编译|运行错误

简介:

编译器给出的错误描述的朦胧程度是有目共睹的,本文记录了平时常见的编译错误及其正确内容以辅助参考。长期更新。

按第一个有意义的错误的首字母排序,以便查找。


错误: “$”未定义(出现在master/layout的jquery中)2011-05-01

原因1:若在MVC中,一种原因是链接参数问题。比如应该调用controller/action?peopleID=34,但却直接调用了controller/action/34(一般会被解析为controller/action?id=34而不是peopleID),结果出错。把调用连接换成controller/action?peopleID=34就可能能解决。

另外一种情况是参数仍为id,但却无法识别controller/action/34而只能识别controller/action?id=34,原因可能是global.acax.cs里边的route代码出了问题,笔者尚未弄清楚,但只要保持controller/action?id=34就可以正常运行。


Cannot convert from 'method group' to 'string'

错误:return repSFC.GetAllViewFitlers(vc.A, vc.C, vc.T).OrderBy(i => i.Order);

正确:return repSFC.GetAllViewFitlers(vc.A(), vc.C(), vc.T()).OrderBy(i => i.Order);

说明:其实是错把函数当成属性了。

 


cshtml后缀不识别(警告) 2011-05-07

There is no build provider registered for the extension '.cshtml'. You can register one in the <compilation><buildProviders> section in machine.config or web.config. Make sure is has a BuildProviderAppliesToAttribute attribute which includes the value 'Web' or 'All'. C:/Users/...

说明:这是因为原来的vs2010不认识csttml,不知道如何对其进行编译。

解决:在web.config里边两个地方加上:

<assemblies>

...
<add assembly="System.Web.WebPages.Razor, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
</assemblies>

<providers>
...
<add extension=".cshtml" type="System.Web.WebPages.Razor.RazorBuildProvider, System.Web.WebPages.Razor"/>
</providers>


Foreach cannot operate on a 'method group'. Did you intend to invoke the 'method group'? 2011-05-04

错误:还是把函数当成属性了,比如:@foreach(var sprint in Sprint.Sprints)

正确:@foreach(var sprint in Sprint.Sprints()),或者干脆声明Sprints为属性。

 


JQuery未定义(运行某些页面时弹出)2011-05-03

错误:layout或master中包含了错误的Jquery版本,就是这一带出了问题:

<script src="../../Scripts/jquery-1.4.4.min.js" type="text/javascript"></script>
<script src="../../Scripts/jquery-ui-1.8.11.custom.min.js" type="text/javascript"></script>

正确:请检查此页面所用的母板与其他能正常运行的页面所有母板中对script的引用的差别,拷贝正确的来就可以了。

说明:ViewBag中的所有变量都是Object,因此如果ViewFilterMapsOf被重载过,这里不知道是调用的具体哪个(尽管人眼能看出来,但机器不能)。

 


 

RenderPartial错误: 'System.Web.Mvc.HtmlHelper<System.Collections.Generic.IEnumerable<Martian.Areas.SFC.Models.SFCViewFilter>>' has no applicable method named 'RenderPartial' but appears to have an extension method by that name. Extension methods cannot be dynamically dispatched. Consider casting the dynamic arguments or calling the extension method without the extension method syntax.

错误:@{Html.RenderPartial("_SubMenuContentFilters", @ViewBag.Route);}

正确:@{Html.RenderPartial("_SubMenuContentFilters", @ViewBag.Route as MVCRoute);}
说明:RenderPartial不能动态解析(dynamically dispatched)ViewBag中的随时生成的类型,需要显式转换(casting)。不过这点微软设计不好,因为Partial中有model声明,信息足以进行解析。

 

 


'object' does not contain a definition for 'ToList'

错误:List<SFCViewFilterMap> filters = SFCViewFilterMap.ViewFilterMapsOf(Model, ViewBag.FilterGroup).ToList();

 

正确:List<SFCViewFilterMap> filters = SFCViewFilterMap.ViewFilterMapsOf(Model, ViewBag.FilterGroup as string).ToList();

说明:还是老问题,ViewBag的变量不会自动转换为实际类型。

 


 

Error: Object doesn't support property or method 'XXX'

错误:重复引用了script (如jquery)

场景1:

<head runat="server">

……
@{Html.RenderPartial("_Scripts");}
</head>

<body runat = "server">
<script src="../../Scripts/jquery-1.4.4.min.js" type="text/javascript"></script>
<script src="../../Scripts/jquery-ui-1.8.11.custom.min.js" type="text/javascript"></script>

而在Html.RenderPartial("_Scripts")中,已经引用了下面两个script。

 


The model of type XXX could not be updated.

错误:UpdateModel(item, "story.Title");

正确:UpdateModel(item, "story");

说明:好像造成这种错误的原因很多,Google上有各种答案。而这次错误最终发现是不小心把最终要更新的字段名Title也放到prefix里边了。

 


The type 'T' must be a reference type in order to use it as parameter 'TEntity' in the generic type or method 'System.Data.Linq.Table<TEntity>' 2011-05-25

错误:private void GetOrDefaultUDC<T>(Table<T> table, string what, int whatID, int mapID, out int id, out Object value)
where T: IUDC, new()

错误:private void GetOrDefaultUDC<T>(Table<T> table, string what, int whatID, int mapID, out int id, out Object value)
where T: class, IUDC, new()

说明:关键词是reference,见到它就补一个class(尽管从IUDC派生多半已经是class了)。这里出现此约束的原因是在Table的声明中,声明了凡是Table<T>中的T必须是个class,具体声明是:public sealed class Table<TEntity> : IQueryProvider, ITable, IListSource, ITable<TEntity>, IQueryable<TEntity>, IEnumerable<TEntity>, IQueryable, IEnumerable where TEntity : class


System.Data.Linq.ChangeConflictException: Row not found or changed.

现象:如果在编辑一个控件后,UpdateModel后Save时出这个错误,特别是如果编辑两个以上字段的时候出现1 of n updates failed,则基本确定是LINQ出问题了。

如果使用LINQ,又在数据库表中设置了外键(Relationship里边),然后拖拽到DBML中看到了箭头,则这个错误就难以避免。

这个错误是个著名的LINQ Bug,从09年就有,至今未进行修改。唯一处理办法,是删除所有Relationship,然后就好了。

很多人因此而选择EF而非LINQ。


本文转自火星人陈勇 51CTO博客,原文链接:http://blog.51cto.com/cheny/1100082


相关文章
|
13天前
|
开发框架 搜索推荐 算法
一个包含了 50+ C#/.NET编程技巧实战练习教程
一个包含了 50+ C#/.NET编程技巧实战练习教程
66 18
|
13天前
|
缓存 算法 安全
精选10款C#/.NET开发必备类库(含使用教程),工作效率提升利器!
精选10款C#/.NET开发必备类库(含使用教程),工作效率提升利器!
45 12
|
13天前
|
Linux C# iOS开发
开源GTKSystem.Windows.Forms框架让C# Winform支持跨平台运行
开源GTKSystem.Windows.Forms框架让C# Winform支持跨平台运行
46 12
|
12天前
|
开发框架 人工智能 .NET
C#/.NET/.NET Core拾遗补漏合集(24年12月更新)
C#/.NET/.NET Core拾遗补漏合集(24年12月更新)
|
12天前
|
开发框架 算法 .NET
C#/.NET/.NET Core技术前沿周刊 | 第 15 期(2024年11.25-11.30)
C#/.NET/.NET Core技术前沿周刊 | 第 15 期(2024年11.25-11.30)
|
12天前
|
开发框架 Cloud Native .NET
C#/.NET/.NET Core技术前沿周刊 | 第 16 期(2024年12.01-12.08)
C#/.NET/.NET Core技术前沿周刊 | 第 16 期(2024年12.01-12.08)
|
26天前
|
开发框架 监控 .NET
C#进阶-ASP.NET WebForms调用ASMX的WebService接口
通过本文的介绍,希望您能深入理解并掌握ASP.NET WebForms中调用ASMX WebService接口的方法和技巧,并在实际项目中灵活运用这些技术,提高开发效率和应用性能。
41 5
|
1月前
|
算法 Java 测试技术
Benchmark.NET:让 C# 测试程序性能变得既酷又简单
Benchmark.NET是一款专为 .NET 平台设计的性能基准测试框架,它可以帮助你测量代码的执行时间、内存使用情况等性能指标。它就像是你代码的 "健身教练",帮助你找到瓶颈,优化性能,让你的应用跑得更快、更稳!希望这个小教程能让你在追求高性能的路上越走越远,享受编程带来的无限乐趣!
104 13
|
2月前
|
数据库连接 数据库 C#
Windows下C# 通过ADO.NET方式连接南大通用GBase 8s数据库(上)
Windows下C# 通过ADO.NET方式连接南大通用GBase 8s数据库(上)
|
2月前
|
数据库连接 数据库 C#
Windows下C# 通过ADO.NET方式连接南大通用GBase 8s数据库(下)
本文接续前文,深入讲解了在Windows环境下使用C#和ADO.NET操作南大通用GBase 8s数据库的方法。通过Visual Studio 2022创建项目,添加GBase 8s的DLL引用,并提供了详细的C#代码示例,涵盖数据库连接、表的创建与修改、数据的增删查改等操作,旨在帮助开发者提高数据库管理效率。