2016-01-03 2 views
0

Итак, у меня есть модель для всех моих рецептов, и я хочу создать представление, которое отображает список всех рецептов с логическим, если текущий пользователь может редактировать рецепт , Для этого я сделал модель презентации. Однако, когда я нажимаю «Добавить вид» в контроллере и генерирую новое представление с этой моделью представления, представление показывает только логические поля «рецепт». Что делать, чтобы создать представление с помощью bool и всех полей «recipe».Создать вид бритвы с несколькими моделями в классе модели

модель 'Рецепт':

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Web; 

namespace ReceptenApp.Models 
{ 
public class Recept 
{ 

    public int Id { get; set; } 
    public int Category { get; set; } 
    public string Title { get; set; } 
    public string Description { get; set; } 
    public string Cook { get; set; } 
} 
} 

Презентация Модель:

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Web; 

namespace ReceptenApp.Models.PresentationModels 
{ 
public class PMReceptListItem 
{ 
    public PMReceptListItem() 
    { 
     recept = new ReceptWithCats(); 
    } 
    public ReceptWithCats recept { get; set; } 
    public bool ShowEdit { get; set; } 
} 
} 

Вид после ее получения:

@model IEnumerable<ReceptenApp.Models.PresentationModels.PMReceptListItem> 

@{ 
ViewBag.Title = "Index"; 
} 

<h2>Index</h2> 

<p> 
@Html.ActionLink("Create New", "Create") 
</p> 
<table class="table"> 
    <tr> 
     <th> 
      @Html.DisplayNameFor(model => model.ShowEdit) 
     </th> 
     <th></th> 
    </tr> 

@foreach (var item in Model) { 
<tr> 
    <td> 
     @Html.DisplayFor(modelItem => item.ShowEdit) 
    </td> 
    <td> 
     @Html.ActionLink("Edit", "Edit", new { /* id=item.PrimaryKey */ }) | 
     @Html.ActionLink("Details", "Details", new { /* id=item.PrimaryKey */ }) | 
     @Html.ActionLink("Delete", "Delete", new { /* id=item.PrimaryKey */ }) 
    </td> 
</tr> 
} 
</table> 

ответ

0

С вашей точки зрения это все листинг Recept, давайте обновить ваш (модель представления), чтобы отразить это. Мы также создадим новую модель (ReceptViewModel), чтобы представить объект Recept. Мы добавим ReceptList в ReceptListViewModel, который представляет собой список наших новых ReceptViewModel, чтобы мы могли передать список рецептов в представление.

public class ReceptViewModel 
{ 
    public int Id {set;get;} 
    public string Title {set;get;} 
    public string Description {set;get;} 
    public string Cook {set;get;} 
} 
public class ReceptListViewModel 
{ 
    public PMReceptListItem() 
    { 
     ReceptList = new List<ReceptViewModel>(); 
    } 
    public List<ReceptViewModel> ReceptList { get; set; } 
    public bool ShowEdit { get; set; } 
} 

и в вашем GET действии, читать данные из вашей базы и нагрузки на объект нашего ReceptListViewModel

public ActionResult Index() 
{ 
    var vm= new ReceptListViewModel(); 
    vm.ReceptList = db.Recepts.Select(x=>new ReceptViewModel { 
              Id=s.Id, 
              Title=x.Title, 
              Description=x.Description, 
              Cook=x.Cook }).ToList(); 
    vm.ShowEdit = true ; //Set this value based on your condition 
    return View(vm); 
} 

и на ваш взгляд GET

@model List<ReceptListViewModel> 
<h2>List of Recepts</h2> 
<table> 
@foreach(var r in Model.ReceptList) 
{ 
<tr> 
    <td>@r.Title</td> 
    <td>@r.Description</td> 
    <td>@r.Cook</td> 
    @if(Model.ShowEdit) 
    { 
    <td>@Html.ActionLink("Edit","Edit",new { id=r.Id})</td> 
    <td>@Html.ActionLink("Delete","Delete",new { id=r.Id})</td> 
    } 
</tr> 
} 
</table> 
Смежные вопросы