【问题标题】:Stuffing an anonymous type in ViewBag causing model binder issues在 ViewBag 中填充匿名类型会导致模型绑定器问题
【发布时间】:2011-04-13 12:52:12
【问题描述】:

谁能告诉我我做错了什么? :-)

我有一个简单的查询:

 var sample = from training in _db.Trainings
              where training.InstructorID == 10
              select new { Something = training.Instructor.UserName };

然后我将它传递给 ViewBag。

ViewBag.Sample = sample;

然后我想像这样在我的视图中访问它:

@foreach (var item in ViewBag.Sample) {
    @item.Something
}

我收到错误消息“对象”不包含“某物”的定义。如果我只放@item,我会得到结果{ Something = SomeUserName }

感谢您的帮助。

【问题讨论】:

    标签: entity-framework asp.net-mvc-3


    【解决方案1】:

    这是无法做到的。 ViewBag 是动态的,问题是匿名类型是作为内部生成的。我建议您使用视图模型:

    public class Instructor
    {
        public string Name { get; set; }
    }
    

    然后:

    public ActionResult Index()
    {
        var mdoel = from training in _db.Trainings
                     where training.InstructorID == 10
                     select new Instructor { 
                         Name = training.Instructor.UserName 
                     };
        return View(model);
    }
    

    在视图中:

    @model IEnumerable<Instructor>
    @foreach (var item in ViewBag.Sample) {
        @item.Something
    }
    

    【讨论】:

    • +1 - 注意他如何选择new Instructor 一个具体类型——而不是匿名类型。这样他就可以访问对象中的信息。
    • 它有帮助。感谢您的回答。
    【解决方案2】:

    如果你想在 ViewData 中发送例如并且不想在模型中发送 您可以使用与上面答案中相同的方法 并在控制器中

    enter code here
    
    
    ViewData[Instractor] = from training in _db.Trainings
                     where training.InstructorID == 10
                     select new Instructor { 
                         Name = training.Instructor.UserName 
                     };
    

    在视图中您需要将其转换为

    `IEnumerable<Instructor>`
    

    但要做到这一点,你应该使用

    @model IEnumerable<Instructor>
    

    那么你可以做这样的事情

    IEnumerable<instructors> Instructors =(IEnumerable<Instructor>)ViewData[Instractor];
    

    然后用 foreach 去

    @foreach (var item in Instructors ) {
        @item.Something
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-05-18
      • 2012-01-02
      • 2011-09-05
      相关资源
      最近更新 更多