模型如何用于在视图中显示两个表

时间:2014-11-04 11:50:19

标签: c# asp.net-mvc

我想在视图中显示两个表的元素,但我不知道如何。

在我的视图中我有@model IEnumerable指向模型的'Tmembre'类和数据库中表'Tmembre'的对应。 我可以在我的视图中显示此表的元素,确定。

但我也想在这个视图中显示另一个表的元素,我不能在视图中放置其他@modeldéclaration。

我尝试在模型中为两个表创建一个类并将sql放在模型中但我认为它不在模型中我必须请求DB。

public class myviewmodel
{
    public Tmembre tmembre { get; set; }
    public List<Tmembre> GetlstMembre { // SQL }

    public TAssociation tassociation { get; set; }
    public List<TAssociation> GetlstAssociation { // SQL  }
}

2 个答案:

答案 0 :(得分:1)

在您的控制器中,您可以创建上述ViewModel的新实例,并使用数据库中的数据填充成员。

完成后,您应该将此ViewModel返回到View;

public ActionResult Index()
{
   MyViewModel myViewModel = new MyViewModel();
   myViewModel.lstmembre = ....;
   myViewModel.1stassociation = ...;

   return View(myViewModel);    
}

在您的视图中,您现在可以将@model指定为视图模型

@model myproject.web.models.MyViewModel

现在,您可以从视图中访问此模型的所有成员

Model.1stmembre
Model.1stassociation
Model.tmembre
etc..

答案 1 :(得分:0)

行             ViewBag.Message =&#34; Liste des membres&#34 ;;

        //Chercher les informations du membre connecté
        //Tmembre Membre = db.TmembresansEDMdb.Find(10);
        //TAssociation association = db.dbTassociation.Find(Membre.Idassociation);

        //ViewData.Model = (from a in db.TmembresansEDMdb
        //                  where a.Idassociation == Membre.Idassociation
         //                 select a );


        myviewmodel mymodel = new myviewmodel();
        Tmembre Membre = db.TmembresansEDMdb.Find(1);

        mymodel.lstassociation = db.dbTassociation.ToList();
        ViewData["Idassociation"] = Membre.Idassociation;
        mymodel.lstmembre= (from a in db.TmembresansEDMdb
                          where a.Idassociation == Membre.Idassociation
                          select a ).ToList();
        return View(mymodel);

在视图中

                @foreach (var item in Model.lstassociation)
                {
                    if (item.Nomassociation == @ViewData["Idassociation"])
                    {
                        <option selected>@item.Nomassociation</option>
                    } else {
                        <option>@item.Nomassociation</option>                            
                    }
                }

    @foreach (var item in Model.lstmembre) {
        <div class="divmembre">
            <div class="dphoto"><img src="~/Content/@item.SRCImage"/></div>
            <div class="containerdetail">
                <div class="ddetail">
                    <div class="ddetaild nom">@item.Nommembre</div>
                    <div class="ddetaild prenom">@item.Prenommembre</div>
                    <div class="ddetaild mail">@item.Mailmembre</div>
                </div>
            </div>
        </div>
    }

显示lstmembre的所有元素,但我想在列表中选择与视图数据中的Idassociation对应的表Association的元素。我有消息:没有切入点 if(item.Nomassociation == ViewData [&#34; Idassociation&#34;])

但如果我在HTML标签中使用@ViewData [&#34; Idassociation&#34;]而不是在循环中就可以了,则会显示该值。我认为这只是一个语法错误。 TKS