[英]How to Use Two Same Model in a View? [MVC4]
我正在尝试创建一个状态更新页,我希望用户在其中插入状态消息到索引页中,并且我想在同一索引页中显示所有插入的所有状态消息。
这是我的模型代码:
public class Statuses
{
[Key]
public int StatusID { get; set; }
[DataType(DataType.MultilineText)]
[Required]
public string message { get; set; }
}
public class StatusContext : DbContext
{
public DbSet<Statuses> Status { get; set; }
}
而且,我用
@Html.EditorFor(model => model.message)在Index.cshtml页面中。
为了显示编辑器,我在View中使用了以下模型。
@model IEnumerable<LearnStart.Models.Statuses>
但是,要在Multiline TextArea下面显示所有状态消息,我认为我应该使用下面的状态消息。
@model IEnumerable<LearnStart.Models.Statuses>
如何在同一个视图中使用两个模型,以便同时显示文本区域(以插入状态消息)并在其下方列出所有可用的状态消息?
首先,您不应该将实体直接传递给视图。 建议的最佳实践是使用视图模型,这些模型是专门为您的视图量身定制的模型。
其次,当使用视图模型时,您现在可以执行此操作,因为它不依赖于数据模型实体:
public class MyActionViewModel {
public List<StatusesViewModel> StatusList {get;set;}
public StatusesViewModel CreatedStatus {get;set}
}
然后在您看来:
@model MyActionViewModel
@Html.EditorFor(x => x.CreatedStatus)
.............................................
@Html.DisplayFor(x => x.StatusList)
然后,您可以创建两个模板,一个EditorTemplate和一个DisplayTempate:
在~/Views/Shared/EditorTemplates/StatusesViewModel.cshtml
@model StatusesViewModel
@using(Html.BeginForm()) {
@Html.EditorFor(x => x.Message)
<input type="submit" value="Create Status" />
}
在~/Views/Shared/DisplayTemplates/StatusesViewModel.cshtml
@model StatusesViewModel
<div>
<span>@Model.Message</span>
</div>
使用模板的好处是它们会自动遍历您的集合。.无需使用foreach或for语句。 单个EditorFor可处理整个集合,然后根据类型呈现模板,在这种情况下,该模板将转换为StatusViewModel.cshtml
简单的方法是在Viewbag
放置一个列表,并在View中显示列表,如下所示:
控制器:
Public Actionresult Myaction()
{
.........
Viewbag.data = //bind list of messages here
return View();
}
查看:
@model LearnStart.Models.Statuses
.........
.........
.........
@if(Viewbag.data != null){
<table>
@foreach(var item in Viewbag.data)
{
<tr><td>@item.message</td></tr>
}
</table>
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.