2 回答
TA贡献1906条经验 获得超10个赞
我认为使用动态对象不是一个好主意,默认情况下视图是强类型的,没有模型就无法创建基于属性的模型验证......
通过参考官方文档和其他资源,您可以使用扩展方法将对象转换为 ExpandoObject 并且您的函数应该可以工作:
扩展方法:
public static ExpandoObject ToExpando(this object anonymousObject)
{
IDictionary<string, object> anonymousDictionary = new RouteValueDictionary(anonymousObject);
IDictionary<string, object> expando = new ExpandoObject();
foreach (var item in anonymousDictionary)
expando.Add(item);
return (ExpandoObject)expando;
}
在您的控制器方法的返回中尝试添加:
return ( "yourView", ArtistModel.ToExpando() );
解释:
这样做的原因是匿名类型在内部传递给控制器,因此只能从声明它的程序集中访问它。由于视图是单独编译的,因此动态绑定器抱怨它无法越过该程序集边界。
但是如果你仔细想想,动态绑定器的这种限制实际上是人为的,因为如果你使用私有反射,没有什么可以阻止你访问那些内部成员(是的,它甚至可以在中等信任中工作)。因此,默认的动态绑定器正在竭尽全力执行 C# 编译规则(您无法访问内部成员),而不是让您执行 CLR 运行时允许的操作。
TA贡献1801条经验 获得超16个赞
您发送列表艺术家但尝试获得一位艺术家您应该更改此
string artist_Name = Model.Artist.Artist_Name;
到
string artist_Name= Model.Artist.FirstOrDefault().Artist_Name;
要么
改变
@model dynamic
到
@model ExpendoObject
- 2 回答
- 0 关注
- 151 浏览
添加回答
举报
