不同的视图取决于模型属性

时间:2018-11-07 08:32:59

标签: c# asp.net-mvc

已经困扰了一段时间了,希望能在这里得到帮助。

我制作了一个电视指南,该指南由5个不同的视图组成,分别是ChannelOne,ChannelTwo,ChannelThree,ChannelFour和一个显示所有四个频道(fullView)的视图。我有5个表格,并通过实体框架制作了5个相应的模型,这些模型具有此属性(对于其他4个模型,它们相似):

public partial class ChannelOne
{
    public int Id_ChannelOne_ { get; set; }
    public string Channel_ChannelOne_ { get; set; }
    public string Program_ChannelOne_ { get; set; }
    public string Date_ChannelOne_ { get; set; }
    public Nullable<System.TimeSpan> Time_ChannelOne_ { get; set; }
}

当我单击fullView中的某个程序时,我想转到与该程序相对应的视图(该特定频道的视图)。

如果我有一个动作链接可以返回我的fullView控件,

   @Html.ActionLink("Go to channel", "Index", new { channel = item.Channel })

我该如何根据频道属性决定要观看的视频? 我想要这样的东西:

private TvProgramDBEntities db = new TvProgramDBEntities();

 [HttpPost]
    public ActionResult Index(string channel)
    {
        if (channel == "ChannelOne")
            return View(db.ChannelOne);
        if (channel == "ChannelTwo")
            return View(db.ChannelTwo);
    }
                 .
                 .
                 .

1 个答案:

答案 0 :(得分:0)

在主视图中使用Html.DisplayFor和Html.EditorFor模板助手时,Mvc将查找一个视图。

例如

/Views/Channel
    /DisplayTemplates
        ChannelOne.cshtml
   Index.cshtml

使用类似的模型

public class ChannelViewer
{
    public object Channel {get;set;}
}

所以您可以在index.cshtml中找到

@model ChannelModel

@Html.DisplayFor(m => m.Channel)

这将从displaytemplates文件夹中查找正确的视图。这将搜索当前的控制器文件夹,然后搜索共享的显示模板文件夹。

您可以使用EditorTemplates进行相同的操作。然后,您可以根据不同的渠道定制每个视图。