asp.net mvc4奇怪错误两例及解决方法

最近在工作中遇到了非常奇怪的问题,在真正找到原因之前觉得不可解释,非常奇怪。在这里分享给大家,希望碰到类似的情况时,这篇文章给你一个提醒。

产生错误的背景

本人在View中写了一段大约10-20行的代码来动态生成WebGrid的column, 根据客户的意见,要将这段代码移到一个独立的c#代码中去。于是加了一个Class library, 把这段代码全部移过去了。把调用的代码写好,一运行,发现报错。这个错从来没有见过,仔细看了一下代码,认为没有问题,但是不明白为什么出问题。就稍微改了一下代码,运行又出另外一个奇怪的错误。看了代码还是觉得没有问题,还是不明白为什么出问题。下面是详细情况。

错误1:Entry point was not found.

这是主要代码, 这段c#代码已经全部移到这个c#类。运行以后,View抛出一个Exception: Entry point was not found, 而且指向的是@grid.GetHtml这一行。

using System;
using System.Collections.Generic;
using System.Web.Mvc;
using System.Web.Helpers;

namespace ClassLibrary1
{
    public static class myGrid
    {
        public static List<WebGridColumn> GenerateGridColumn(WebViewPage page)
        {
            var list = new List<WebGridColumn>();
            var gridColumn = new WebGridColumn();
            gridColumn.ColumnName = "test";
            gridColumn.Header = " test header";
            list.Add(gridColumn);
            var gridColumn1 = new WebGridColumn();
            gridColumn.Format = item => page.Html.Raw("<a href=\"test\"></a>");
            list.Add(gridColumn1);
            return list;
        }
    }
}

myGrid.cs

@model List<Class1>
@using ClassLibrary1;
@{
    ViewBag.Title = "Index";
}

<h2>Index</h2>
@{
    WebGrid grid = new WebGrid(source:Model);
    var list = myGrid.GenerateGridColumn(this);
}
@grid.GetHtml(columns: list)

View的代码

看了好多遍代码,也进行了调试,看不出问题来。在调试过程中注意到一个怪现象,myGrid.GenerateGridColumn返回的应该是一个List<WebGridColumn>,试图在Watch窗口查看其值时却出了一个莫明其妙的错误: Unable to evaluate the expression. Operation not supported. Unknown error: 0x8004f0ed. 这样就带来了很大的问题。调试也看不出问题。究竟问题在哪里呢。虽然没有明显的证据,本人看到有一个Html在这段代码中,怀疑这个Html.Raw引起的问题。本人觉得这个Html.Raw可能必须得在View中才能正常工作。于是就试着将包含Html.Raw的那段代码移出c#类代码,还是放到View中。代码就成了这样:

using System;
using System.Collections.Generic;
using System.Web.Helpers;

namespace ClassLibrary1
{
    public static class myGrid
    {
        public static List<WebGridColumn> GenerateGridColumn()
        {
            var list = new List<WebGridColumn>();
            var gridColumn = new WebGridColumn();
            gridColumn.ColumnName = "test";
            gridColumn.Header = " test header";
            list.Add(gridColumn);
            return list;
        }
    }
}

改过了的myGrid.cs

@model List<Class1>
@using ClassLibrary1;
@{
    ViewBag.Title = "Index";
}

<h2>Index</h2>
@{
    WebGrid grid = new WebGrid(source:Model);
    var list = myGrid.GenerateGridColumn();
    var gridColumn1 = new WebGridColumn();
    gridColumn1.Format = item => Html.Raw("<a href=\"test\"></a>");
    list.Add(gridColumn1);
}
@grid.GetHtml(columns: list)

改过了的View代码

这样的话,List的一部分Item就在myGrid中加入的,另一部分就在View中加入的。但是这样的还是会出问题: 错误信息如下:

错误2: Attempted to access an element as a type incompatible with the array

看了这个错误信息后也是查看代码,调试了半天,始终是认为代码没有问题,但是就是不明白为什么会出这个问题。而且调试的时候,这个List<WebGridColumn>类型的list还是一样不能在Watch窗口查看,错误信息还是一样的:Unable to evaluate the expression. Operation not supported. Unknown error: 0x8004f0ed,对比了MyGrid.cs的代码和View的代码, 明明都是往List中加入WebGridColumn类型的元素,应该是同样的元素,不可能报这个错误的。想不透。

于是网上搜索,网上有人提到可能是Web.config文件中引用错的版本的System.Web.Helpers.dll, 本人到Web.config中一看, Web.config没有问题。然后还继续找问题。找了两天,还是没有找到问题的根源。后来检查了每一个工程的References, 突然有一个令人眼前一亮的发现:这个ClassLibrary的竟然引用的是1.0版本的System.Web.Helpers.dll。这可能就是问题所在。于是把1.0换成2.0的Reference, 然后所有这些错误就都消失了。心中欣喜了一番。

经验谈

  asp.net mvc有很多名称一样但是版本不一样的dll, 我们从老版本升级到新版本,或者构造一个新版本的asp.net mvc应用程序,在Web.config中,还有每一个工程的reference中都得确保我们引用了正确版本的dll。不然到时我们掉到哪个陷阱里都不知道。

出错的代码下载: http://dl.vmall.com/c0wdxad9am   为了给那些看了文字还是不太明白的同学准备的。

如果觉得此文值得推荐,请帮忙点推荐。

 

时间: 2024-09-26 15:02:29

asp.net mvc4奇怪错误两例及解决方法的相关文章

C# ASP.NET Webservice调用外部exe无效的解决方法

原文:C# ASP.NET Webservice调用外部exe无效的解决方法 最近用asp.net做webservice,其中有个功能是调用执行外部的exe(类似cmd中执行),但执行Process.Start之后就没有结果,同样代码在winform下正常,折腾两天终于找到解决方法 本文参考了以下网页,十分感谢 http://bbs.csdn.net/topics/300053869 http://blog.163.com/qiaoweipeng@126/blog/static/15737970

jquery trigger函数执行两次的解决方法_jquery

本文实例讲述了jquery trigger函数执行两次的解决方法.分享给大家供大家参考,具体如下: 一.问题如下: 有如下代码: <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title></title> <style type="text/css"> *{margin:0;pa

Win7用浏览器打开网页提示502 Bad Gateway错误的三种解决方法

Win7用浏览器打开网页提示502 Bad Gateway错误的三种解决方法   方法一.关闭代理 1.首先可能是我们浏览器使用了代理,我们打开桌面的浏览器找到右上角的工具打开,在下拉菜单中找到代理服务器选项; 2.然后在弹出的代理服务器选项中,选择不使用代理的选项在前面打勾,然后重启浏览器即可. 方法二:关闭不必要的程序 1.出现这种情况的可能是被一些程序拦截导致的,我们右键点击电脑下方任务栏的空白区域; 2.然后在下拉菜单中找到任务管理器,点击进入任务管理器界面; 3.然后在任务管理器中找到

软盘坏道造成读写错误的原因及解决方法

  软盘坏道怎么办? 软盘是个人计算机中作为一种可移贮存硬件,它是用于那些需要被物理移动的小文件的理想选择.软盘有八寸.五又四分之一寸.三寸半之分.当中又分为硬磁区Hard-sectored 及软磁区Soft-Sectored. 下面,我们就来看看软盘坏道造成读写错误的原因及解决方法. 正常碰见这样的问题是因磁盘坏道造成的.一般磁盘坏道,除了用软件工具,还可用Windows的磁盘扫描功能就能解决,在DOS.Windows 9x/Me系统里用自带Scandisk的命令扫描软盘就行了,只要对您想所要

ThinkPHP调用common/common.php函数提示错误function undefined的解决方法_php实例

本文主要介绍了ThinkPHP调用common/common.php函数提示错误function undefined的解决方法.对于采用ThinkPHP进行项目开发的朋友来说,在进行ThinkPHP升级后经常会遇到这类问题.具体描述如下: 在对ThinkPHP升级后使用了最新的ThinkPHP3.2版本,将通用的函数放到了common/common.php中,但是在具体页面调用函数时出现了function undefined的错误提示. 在查看了官方文档后发现,原来ThinkPHP3.2版本co

Yum安装中出现错误mirrorlist.txt的解决方法_Linux

发现问题 今天在使用Yum install命令安装软件的时候一直提示一个错误,错误提示如下面: # yum install mysql Loaded plugins: fastestmirror Loading mirror speeds from cached hostfile YumRepo Error: All mirror URLs are not using ftp, http[s] or file. Eg. </HTML>/ removing mirrorlist with no

thinkphp3.0输出重复两次的解决方法_php实例

本文实例讲述了thinkphp3.0输出重复两次的解决方法.分享给大家供大家参考.具体方法如下: 主入口文件如下: 复制代码 代码如下: <?php  define('APP_NAME','Admin');//定义项目名称  define('APP_PATH','./Admin/');//定义项目存放路径  define('THINK_PATH','./ThinkPHP/');//定义ThinkPHP核心文件所在路径  require THINK_PATH.'ThinkPHP.php';//导入

easyui window refresh 刷新两次的解决方法(推荐)_javascript技巧

这样写刷新两次 $("#windowid").window('refresh','url01.php'); $("#windowid").window('open'); 这样写刷新一次     $("#windowid").window('open'); $("#windowid").window('refresh','url01.php'); 以上这篇easyui window refresh 刷新两次的解决方法(推荐)就是

紧急求助,在iis6上部署asp.net mvc4出现错误

问题描述 刚开始报的错误如下:ServerErrorin'/'Application.ConfigurationErrorDescription:Anerroroccurredduringtheprocessingofaconfigurationfilerequiredtoservicethisrequest.Pleasereviewthespecificerrordetailsbelowandmodifyyourconfigurationfileappropriately.ParserErro