amd*_*amd 5 c# asp.net-mvc c#-4.0 asp.net-mvc-3
在我的MVC应用程序中:
在控制器中,我创建了一个动态类型列表,它存储在会话中.然后视图尝试访问对象,但它会引发异常:'object' does not contain a definition for 'a'
代码 :
// Controller
List<dynamic> myLists = new List<dynamic>();
for(int i=0; i<3; i++){
var ano = new { a='a' , b = i };
myLists.Add(ano);
}
Session["rows"] = myLists;
Run Code Online (Sandbox Code Playgroud)
在我看来
// My View
foreach( dynamic row in (Session["rows"] as List<dynamic>)){
<div>@row</div> // output {a:'a', b :1}
<div>@row.a</div> // throw the error.
}
Run Code Online (Sandbox Code Playgroud)
注意
var,object而不是dynamic=>相同的结果Razor engine为什么我无法访问该属性,如果调试器可以看到它,我该如何解决这个问题?
匿名类型适用internal于声明它们的程序集。API尊重可访问dynamic性。由于该值存在(来自“//输出...”),我必须得出结论这是一个可访问性问题。IIRC 早期版本的 razor/MVC3 在这种情况下确实存在问题,尽管从记忆中,该问题在其中一个服务包中消失了 - 您可能需要检查您是否是最新的 razor / MVC3 / .NET / VS补丁。然而,这里最简单的解决方法是声明一个正确的 POCO 类:
public class MyViewModelType {
public char A {get;set;}
public int B {get;set;}
}
Run Code Online (Sandbox Code Playgroud)
并使用它而不是匿名类型。这也意味着您不需要使用dynamic,这是不必要的并且过度杀伤力。
| 归档时间: |
|
| 查看次数: |
748 次 |
| 最近记录: |