簡體   English   中英

MVC3將模型(某些字段)綁定到視圖

[英]MVC3 Binding model (some fields) to the view

將模型綁定到視圖。

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

在我的控制器中,我想檢索一些字段,例如:

 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提供正確的語法。 謝謝

如果你的觀點是需要模型是Enumerable那么它需要AsEnumerable在你的SELECT語句。

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,所以我不確定這是否完美。

您可以使用.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) {
 }

我建議您將數據db.People或類似的名稱。

您應該使用p.ID == 3而不是p.ID = 3

如果您打算只選擇一個Person並顯示,則使用SingleOrDefault()First()FirstOrDefault()僅獲得一個Person輸入。

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。 如果您只想要標題,那么您可以使用

@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>在視圖中使用該模型: @model IEnumerable<PersonViewModel>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM