我使用lambda表达式来获取表中的两列但是如何使用viewbag在我的视图中访问它,如果我们使用lambda表达式从表中获取两列,那将是什么类型。
例如:
GatesEntities Gates = new GatesEntities();
ViewBag.Index = Gates.Concepts.OrderBy(s => s.concept_id).Select(s => new { s.Concept_Name,s.Session_Id });
return View();
我有5个会话,在每个会话中我都有一些概念。现在我需要使用viewbag为我的视图中的每个会话获取概念名称。
请帮助我,我浪费了很多时间在这上面..
答案 0 :(得分:0)
Viewbag.Index是一个IEnumerable(因为Gates.Concepts.OrderBy(s => s.concept_id).Select(s => new { s.Concept_Name,s.Session_Id })
返回一个集合),所以在视图上迭代它。
@foreach(Concept i in (IEnumerable<Concept>)Viewbag.Index){
<p>@i.Concept_Name</p>
<p>@i.Session_Id</p>
}
答案 1 :(得分:0)
GatesEntities Gates = new GatesEntities();
ViewBag.Index = Gates.Concepts.OrderBy(s => s.concept_id).ToList();
return View();
查看代码
@foreach(var c in (List<Concepts>)ViewBag.Index)
{
@c.Concept_Name
}
答案 2 :(得分:0)
new { ... }
的语法意味着您正在创建被称为&#34;匿名对象&#34;的内容。这些类型为object
,并要求您在&#34;动态&#34;内部引用属性,也就是说在运行时。
因此,真的错误的想法是将它用于视图之类的东西,在那里你只是开始运行时编译。至少在控制器动作之类的东西中,你会得到一些编译时错误检查,但在视图中,这只是一个等待爆炸的定时炸弹。
课程很便宜,如果你要做这样的事情,那么建立一个容纳价值的课程就好了,那么你就会在整个过程中强力打字。这意味着更少的错误,因为Visual Studio会正确地向你尖叫,因为如果你犯了错误,你就会编写代码和编译错误。例如(在这里猜测你的类型):
public class ConceptViewModel
{
public string Concept_Name { get; set; }
public Guid Session_Id { get; set; }
}
然后:
var model = Gates.Concepts.OrderBy(s => s.concept_id).Select(s => new ConceptViewModel {
Concept_Name = s.Concept_Name,
Session_Id = s.Session_Id
});
return View(model);
最后在你看来:
@model IEnumerable<ConceptViewModel>
// whatever