繁体   English   中英

如何在视图中使用两个相同的模型? [MVC4]

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM