MVC3绑定模型(一些字段)到视图

时间:2012-02-02 21:43:17

标签: c# linq asp.net-mvc-3 viewmodel

将模型绑定到视图。

我的模特人有{Id,Title,Address ...等)

在我的控制器中,我想要检索一些字段 e.g:

 var model = from p in db.Person where p.jobtype == 1 
             select new Person { Title = p.Title, Address = p.Address};
 return View(model);

也尝试使用匿名类型,但不起作用:

 var model = from p in db.Person where p.jobtype == 1 
             select new { p.Title, p.Address};
 return View(model);

在我看来:

 @model IEnumerable<Demo.Models.Person>
 @foreach (var item in Model) {
 <div>@item.Title</div>}  >FAILS

如果我检索完整对象然后它工作,我如何使用匿名类型或\并使用我的模型检索一些字段.... plz提供正确的语法。感谢

3 个答案:

答案 0 :(得分:1)

如果您的视图要求模型为Enumerable,那么您的选择语句中需要AsEnumerable

var model = (from p in db.Person
            where p.jobtype == 1
            select p).AsEnumerable();

return View(model);

然后

@model IEnumerable<Demo.Models.Person>

@foreach (var item in Model.ToList()) {
<div>@item.Title</div>}

或者,由于您只需要在一天结束时使用列表,并且“应该”使用ViewModel,我建议如下。

<强>视图模型

public class PersonViewModel
{
    public int Name { get; set; }
    public string Title { get; set; }
}

控制器

var person = (from p in db.Person
            where p.jobtype == 1
            select p);

PersonViewModel model = Mapper.Map<Person, PersonViewModel>(person);

return View(model.ToList());

查看

@model List<Demo.ViewModels.PersonViewModel>

@foreach (var item in Model) {
<div>@item.Title</div>}

注意:我在上面的示例中使用了AutoMapper
我面前没有我的IDE,所以我不确定这是不是很完美。

答案 1 :(得分:0)

您可以使用.ToList():

List<person> model = (from p in db.Person 
                      where p.jobtype == 1 
                      select p).ToList();
return View(model);

在您看来:

 @model List<person>
 @foreach (var item in Model) {
 }

答案 2 :(得分:-1)

我建议您拨打您的数据db.People或类似的内容。

您应该使用p.ID == 3代替p.ID = 3

如果您的目的是只选择一个人并显示,那么使用SingleOrDefault()First()FirstOrDefault()只能获得一个人员条目。

var model = (from p in db.Person where p.ID == 3 
             select p.Title).First();

然后在你的模型中不要使用IEnumerable,只需使用:

 @model Demo.Models.Person
      <div>@item.Title</div>

编辑: 在您更新问题以包含p.jobtype而不是p.ID以选择多个之后我会建议您使用特定的ViewModel来选择您想要的数据。 如果您想要的只是Title,那么您可以使用

@model IEnumerable<string>
@foreach (var title in Model) {
 <div>@title</div>}

但我建议使用仅包含您需要的字段的特定ViewModel,例如:

public class PersonViewModel
{
    public int Name { get; set; }
    public string Title { get; set; }
}

然后select new PersonViewModel {Name = p.Name, Title = p.Title } 当然,在视图中使用该模型:@model IEnumerable<PersonViewModel>