所以基本上我的所有配方都有一个模型,我想创建一个视图,如果当前登录的用户可以编辑配方,则显示所有配方的列表。我做了一个演示模型来做到这一点。但是,当我单击控制器中的“添加视图”并使用此演示模型生成新视图时,视图仅显示“配方”的布尔值字段。如何使用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 :(得分:0)
由于您的视图列出了所有Recept,所以让我们更新您的演示模型(视图模型)以反映这一点。我们还将创建一个新的视图模型( ReceptViewModel
)来表示Recept
实体。我们将在ReceptList
中添加ReceptListViewModel
我们新的ReceptViewModel列表,以便我们可以将Recept列表传递给视图。
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>