缘由,不能在Razor中使用匿名类,

先事先封装了一个方法,用于Razor给cshtml模板返回页面。 

 

在ashx一般处理程序中,是这样调用的

匿名类的格式如下:(只看格式,不看具体内容)

调用这样

报错

[TemplateCompilationException: Unable to compile template. “object”不包含“UserName”的定义,并且找不到可接受类型为“object”的第一个参数的扩展方法“UserName”(是否缺少 using 指令或程序集引用?)

分析原因如下:

因为匿名类是internal的,razor的原理是将模板(混合html和@{c#代码})生成.net类,这样肯定就不能用internal的类,(razor的dll程序集跟匿名类肯定不在一个程序集)只能用public类。

(参考文件:

1 http://blog.csdn.net/lxy1106/article/details/50803626

2 http://blog.csdn.net/xcl13014673050/article/details/46816817

参考原理如下:

解决方法

1.不使用匿名类,在Model中声明一个新的public类,来存储需要的字段属性。

2.使用匿名类,使用Newtonsoft.Json 9.0.1 (https://github.com/JamesNK/Newtonsoft.Json/releases/tag/9.0.1)

首先,加载newtonsoft.json.dll,然后添加引用。

然后,添加方法如下

/// <summary>
/// 将匿名类转换为public
/// </summary>
/// <param name="obj"></param>
/// <returns></returns>
public static dynamic ToDynamicObject(object obj)
{ string json = JsonConvert.SerializeObject(obj); //将匿名类转换为字符串 dynamic dynamicObj = JsonConvert.DeserializeObject(json);//将字符串转换为object,此时为public return dynamicObj; }

更改ashx中的代码

但是注意!!!!这样,在cshtml拿到的model就是一个dynamic的集合,因此要用foreach遍历,不再是强类型的了,所以cshtml代码如下

这样就能完成匿名类在razor中的调用,虽然功能能完成,但是这样并不是很好。最好还是使用第一种方法,在Model中建一个类。

追加::

对于这种情况就能执行的原因。(不也是匿名类吗?)

因为这样写没有用到dynamic去读取属性的值,而是模板使用反射读取的,反射是可以读取internal成员的,但是一旦放到集合中或者有关联属性的时候,就用到dynamic了,而dyanmic是无法访问internal的

下面是在reflector中ParseRazor方法

关于匿名类无法转换为object的更多相关文章

  1. EF select 匿名类 问题

    连续两次被相同问题困扰. 一.举例 var query=db.StudentScore.Where(r=> r.SubjectId==subjectId).Select(g=>new {S ...

  2. c# 把一个匿名对象赋值给一个Object类型的变量后,怎么取这个变量? c# dynamic动态类型和匿名类 详解C# 匿名对象(匿名类型)、var、动态类型 dynamic 深入浅析C#中的var和dynamic

    比如有一个匿名对象,var  result =......Select( a=>new {  id=a.id, name=a.name});然后Object  obj =  result ;我怎 ...

  3. Linq之隐式类型、自动属性、初始化器、匿名类

    目录 写在前面 系列文章 隐式类型 自动属性 初始化器 匿名类 总结 写在前面 上篇文章是本系列的小插曲,也是在项目中遇到,觉得有必要总结一下,就顺手写在了博客中,也希望能帮到一些朋友.本文将继续介绍 ...

  4. C#将类对象转换为字典

    主要是实现将类里面 的属性和对应的值转换为字典的键和值. public class RDfsedfw { /// <summary> /// 将匿名类转换为字典 /// </summ ...

  5. 学习笔记:因为java匿名类学习到接口的一些小用法

    在看CometD的示例代码时发现了许多有意思的代码,但说实话看别人的代码确实是件很累的事情,所以就看到这个知识点做一下记录吧.   先看一段代码: 代码1   这段代码中有一个new的操作,而且是在方 ...

  6. HttpCookie加匿名类实现多语言

    突然想做一个多语言网站,确不知道怎么实现好,突然想到了HttpCookie,然后页面后台用匿名类实现语言的储存. string lan = Request["str_lan"]; ...

  7. .net 根据匿名类生成实体类,根据datatable生成实体类,根据sql生成实体类

    在开发中可能会遇到这几种情况 1.EF或LINQ查询出来的匿名对象在其它地方调用不方便,又懒的手动建实体类 2.通过datatable反射实体需要先建一个类 ,头痛 3.通过SQL语句返回的实体也需要 ...

  8. c# dynamic动态类型和匿名类

    dynamic类型 简单示例 dynamic expando = new System.Dynamic.ExpandoObject(); //动态类型字段 可读可写 expando.Id = 1; e ...

  9. .net学习之新语法学习(匿名类和匿名方法,扩展方法,系统内置委托,Lambda表达式和linq等)

    1.自动属性 Auto-Implemented Properties 2.隐式类型 var  var变量不能作为全局变量使用,因为不能在编译时确定类型 3.参数默认值 和 命名参数 4.对象初始化器 ...

随机推荐

  1. v$osstat

    SQL> select * from v$osstat; STAT_NAME VALUE OSSTAT_ID COMMENTS CUM ----------------------------- ...

  2. 当As3遇见Swift(三)

    类 As3 Swift中似乎没有包,包路径的概念.因而显得简洁的多. package { public class ShuaiGe { } } Swift类 class ShuaiGe{ } 类的构造 ...

  3. 随机删除数据库N条记录

    delete from  table where newsID in(select top 50 newsID from  table order by newid())

  4. [原创]java WEB学习笔记71:Struts2 学习之路-- struts2常见的内建验证程序及注意点,短路验证,非字段验证,错误消息的重用

    本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱 ...

  5. Mysql存储过程总结

    1.     关于MySQL的存储过程 存储过程是数据库存储的一个重要的功能,但是MySQL在5.0以前并不支持存储过程,这使得MySQL在应用上大打折扣.好在MySQL 5.0终于开始已经支持存储过 ...

  6. 夺命雷公狗ThinkPHP项目之----企业网站17之网站配置页的添加

    为了网站可以智能一点,所以我们开始来写一个网站配置的功能.. 所以我来写他的数据表: 先来完成他的添加功能,页面效果如下所示: lists.html代码如下所示: <!doctype html& ...

  7. Android 屏幕滑动事件

    http://blog.csdn.net/iamfafa/article/details/6316062 Android里有两个类 android.view.GestureDetector andro ...

  8. 给Debian安装Xfce桌面

    1.sudo apt-get install xorg xdm xfce4   2.vi ~/.xinitrc,然后输入:exec xfce4,在终端输入startx命令后就能进入xfce4,或直接在 ...

  9. javascript中字符串格式json如何转化成json对象

    什么是JSON JSON(JavaScript Object Notation)是一种优美的JavaScript对象创建方法.JSON也是一种轻量级数据交换格式.JSON非常易于人阅读与编写,同时利于 ...

  10. Java Persistence API(转)

    定义 Java Persistence API JPA通过JDK 5.0注解或XML描述对象-关系表的映射关系,并将运行期的实体对象持久化到数据库中.[编辑本段]起源 Sun引入新的JPA ORM规范 ...