存储之后,从一个动态对象检索属性/取回它从会话(Retrieve property from a d

2019-09-21 04:17发布

在我的MVC应用程序:

在控制器I创建的动态型,其被存储在会话的列表。 视图然后试图访问的对象,但它会引发异常: '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;

在我看来

// 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.
}

注意

  1. 在调试的时候,在腕表视图我可以看到的属性/值
  2. 我不能在ViewBag列表存储在我的情况,因为我用AJAX调用该方法
  3. 我试图使用varobject ,而不是dynamic =>相同的结果
  4. 我认为这是不相关的MVC或Razor engine
  5. 我试图用一个ASPX视图(未剃刀一个)和相同的结果

为什么我不能访问属性,如果调试器可以看到它,我怎么能解决这个问题?

Answer 1:

匿名类型是internal对声明它们的装配。 该dynamic API 尊重无障碍 。 由于价值是存在的(从“//输出......”),我必须结束这是一个辅助的问题。 IIRC早期建立剃刀/ MVC3有一个问题用的正是这种情况下,虽然从内存问题的服务包之一就走了-你可能要检查你跟上时代的剃刀/ MVC3 / .NET / VS补丁。 然而,这里的最简单的解决将是声明适当的POCO类:

public class MyViewModelType {
    public char A {get;set;}
    public int B {get;set;}
}

并使用匿名类型,与其。 这也意味着你不需要使用dynamic ,这是不必要的,矫枉过正这里。



文章来源: Retrieve property from a dynamic object after storing/retrieving it From the Session