将多个值从查询传递到视图

时间:2015-03-21 18:35:58

标签: c# asp.net-mvc linq razor viewbag

如何将Linq选择中的值从多个表传递到视图?我有一个显示页面内容的模型,我有一个查询来从该内容中选择所有文件。文件信息由多个值定义。在视图中怎么看?我是否必须创建ViewModel?

我的控制器

    public ActionResult Index()
    {
        ViewBag.Message = "Academia Page";

        var cwc_academia = db.CWC_CONTEUDOS.Include(c => c.CWC_PAGINAS)
                             .Where(c => c.CWC_PAGINAS.id_page == 1);

        var ficheirosconteudos = (from c in db.CWC_FILESCONTEUDOS
                    join d in db.CWC_FICHEIROS on c.idfile equals d.id_file
                    join e in db.CWC_TIPOSFICHEIROS on d.idfiletype equals e.id_tpfile
                    join f in db.CWC_EXTENSOESFILES on e.id_tpfile equals f.idtpdoc
                    select (new 
                          {
                              idfilec = d.id_file,
                              filenamec = d.filename,
                              fileurlc = d.fileurl,
                              fileimg = e.tipoimg,
                              fileextc = f.extensao
                          })).ToList();

        ViewBag.fichconte = ficheirosconteudos;

        return View(cwc_academia.ToList());
    }

和我的观点:

@foreach (var item in Model)
{
   <div class="divider"><div class="circle">
      <img src="/Images/orange.png" alt="" /></div></div>
        <div id="acad" class="container">
            <div class="jumbotron">
                <h2>@Html.Raw(item.conttitle)</h2>
                @Html.Raw(item.conttext)
            </div>
        </div>

if (ViewBag.fichconte != null){

    foreach (var fich in ViewBag.fichconte)
    {
        @fich.idfilec
        <br />
        @fich.filenamec
        <br />
        @fich.fileurlc
        <br />
        @fich.fileimg
        <br />
        @fich.fileextc
        <br />
    }
}

}

1 个答案:

答案 0 :(得分:0)

您正在创建一个匿名类型列表并将其分配给ViewBag&#34; fichconte&#34;属性。列表中的结果对象是内部的,并且不适用于动态ViewBag。有关类似情况,请参阅this post

我会创建一个ViewModel类来包装当前模型以及要分配给ViewBag的List。

型号:

public class AcademiaViewModel
{
    public List<CwcConteudos> CwcConteudos {get; set;}
    public List<Ficheiroconteudos> FicheiroconteudosList {get; set;}
}
public class Ficheiroconteudos 
{
    public string IdFilic {get; set;}
    ...add the rest of the properties of the anonymous type
}

控制器:

public ActionResult Index()
{
    ViewBag.Message = "Academia Page";
    AcademiaViewModel viewmodel = new AcademiaViewModel();

    viewmodel.CwcConteudos = db.CWC_CONTEUDOS.Include(c => c.CWC_PAGINAS)
                         .Where(c => c.CWC_PAGINAS.id_page == 1);

    viewmodel.FicheiroconteudosList = (from c in db.CWC_FILESCONTEUDOS
                join d in db.CWC_FICHEIROS on c.idfile equals d.id_file
                join e in db.CWC_TIPOSFICHEIROS on d.idfiletype equals e.id_tpfile
                join f in db.CWC_EXTENSOESFILES on e.id_tpfile equals f.idtpdoc
                select (new Ficheiroconteudos
                      { 
                          IdFilic = d.id_file,
                          filenamec = d.filename,
                          fileurlc = d.fileurl,
                          fileimg = e.tipoimg,
                          fileextc = f.extensao
                      })).ToList();

    return View(viewmodel);
}

查看:

@foreach (var item in Model.CwcConteudos)
{
   <div class="divider"><div class="circle">
      <img src="/Images/orange.png" alt="" /></div></div>
        <div id="acad" class="container">
            <div class="jumbotron">
                <h2>@Html.Raw(item.conttitle)</h2>
                @Html.Raw(item.conttext)
            </div>
        </div>
}
@if (ViewBag.fichconte != null){

    foreach (var fich in Model.FicheiroconteudosList)
    {
        fich.IdFilic
        <br />
        property2...
        <br />
        property3 etc...
    }
}