在视图上显示错误,在displaynamefor softwareid行,说模型SoftwareDTO不包含softwareid的定义。我可以在模型中看到它。
型号:
public class SoftwareDTO
{
public int SoftwareId { get; set; }
public string Name { get; set; }
public string Description { get; set; }
}
控制器:
public ActionResult Index()
{
List<SoftwareDTO> softwareList = new List<SoftwareDTO>();
var data = _db.Software.ToList();
foreach (var sw in data)
{
SoftwareDTO software = new SoftwareDTO()
{
SoftwareId = sw.SoftwareId,
Name = sw.Name,
Description = sw.Description
};
softwareList.Add(software);
};
return View(softwareList);
}
查看:
@model List<Request.Models.SoftwareDTO>
<table class="table">
<tr>
<th>
@Html.DisplayNameFor(model => model.SoftwareId)
</th>
<th>
@Html.DisplayNameFor(model => model.Name)
</th>
<th>
@Html.DisplayNameFor(model => model.Description)
</th>
<th></th>
</tr>
@foreach (var item in Model) {
<tr>
<td>
@Html.DisplayFor(modelItem => item.SoftwareId)
</td>
<td>
@Html.DisplayFor(modelItem => item.Name)
</td>
<td>
@Html.DisplayFor(modelItem => item.Description)
</td>
答案 0 :(得分:0)
因为在剃须刀视图中将其列为一个列表而不是对象SoftwareDTO 我想你错过了foreach
答案 1 :(得分:0)
SoftwareId
是SoftwareDTO
类的属性。您的视图是对SoftwareDTO对象集合的强类型。因此,您需要遍历模型( SoftwareDTO 的集合)并访问每个项目的SoftwareId
。
@model List<Request.Models.SoftwareDTO>
<table class="table">
@foreach(var item in Model)
{
<tr>
<td>
@Html.DisplayNameFor(x=> item.SoftwareId)
</td>
</tr>
}
</table>
编辑: 根据问题中的修改和提供的评论。
您希望在表格标题中打印属性的显示名称。如果您不想更改从操作方法传递的数据,可以尝试使用
@if (Model.Any())
{
<table class="table">
<tr>
<th>
@Html.DisplayNameFor(x => Model[0].SoftwareId)
</th>
</tr>
@foreach (var item in Model)
{
<tr>
<td>
@Html.DisplayFor(x => item.SoftwareId)
</td>
</tr>
}
</table>
}
这是使用集合中的第一项及其属性与DisplayNameFor
方法一起使用。由于我在渲染表之前有一个if条件来检查至少一个项目,如果你的模型有0项,它甚至不会渲染表。
如果要显示带有标题的空表,则有2个选项。
为表格标题编写HTML标记
<table class="table">
<tr>
<th>
<label>Software Id</label>
</th>
</tr>
@foreach (var item in Model)
{
<tr>
<td>
@Html.DisplayFor(x => item.SoftwareId)
</td>
</tr>
}
</table>
或者,如果您仍想使用DisplayNameFor
辅助方法呈现表标题标签,
创建新的视图模型
public class TableListVm
{
public List<SoftwareDTO> Items {set;get;}
public SoftwareDto ItemMeta {set;get;}
public TableListVm()
{
ItemMeta= new SoftwareDto();
}
}
在您的GET操作中,将此对象发送到您的视图
public ActionResult Index()
{
var data = _db.Software.ToList().Select(sw=> new SoftwareDTO {
SoftwareId = sw.SoftwareId,
Name = sw.Name,
Description = sw.Description
}).ToList();
var vm= new TableListVm { Items = data };
return View(vm);
}
在您认为强烈输入此视图模型的视图中。
@model TableListVm
<table class="table">
<tr>
<th>
@Html.DisplayNameFor(x => Model.ItemMeta.SoftwareId)
</th>
</tr>
@foreach (var item in Model.Items)
{
<tr>
<td>
@Html.DisplayFor(x => item.SoftwareId)
</td>
</tr>
}
</table>