代码之家  ›  专栏  ›  技术社区  ›  Jean-Francois

mvc2视图模型数据问题

  •  0
  • Jean-Francois  · 技术社区  · 14 年前

    语言文字
    朗格曼·恩瓦查(100)

    类别
    CatID主键
    无效位

    类别文本
    CatID FK公司 猫名nvarchar(200)
    兰吉德国际

    语言
    语言ID |语言名称
    1 |英语

    类别

    1 |正确

    3 |正确

    类别文本
    CatID | CatName | LangID
    1辆车1辆

    2 |聊天| 2

    3 |航空公司| 2



    首先,我希望在html表中有一个这样的呈现视图

    英语|法语
    汽车
    空|聊天

    以下是我的Linq查询:

     var qry6 = from Cat in _db.Category
                       select new CategoryViewModel
                       {
                           Category = Cat,
                           CatTxt = from lang in _db.Language
                                   join ctxt in Cat.CategoryText on lang.LangID equals ctxt .LangID into jointxt
                                   from endtxt in jointxt.DefaultIfEmpty()
                                   select endtxt 
    
                       };
    


    我的意思是:

     var qry6 = new CategoryViewModel {
                        IDontKnowWhatTypeINeedHere = (from Cat in _db.Category
                                                      select new 
                                                      {
                                                           Category = Cat,
                                                           CatTxt = from lang in _db.Language
                                                                   join ctxt in Cat.CategoryText on lang.LangID equals ctxt .LangID into jointxt
                                                                   from endtxt in jointxt.DefaultIfEmpty()
                                                                   select endtxt 
    
                                                       }).ToList(),
                       LangList = _db.Language
            };
    

    像我在示例中所做的那样,将ViewModel放入视图模型是一个好主意。

    谢谢

    1 回复  |  直到 14 年前
        1
  •  0
  •   Jean-Francois    14 年前

    这是我控制器里的东西。

                var query = new DetailViewModel
            {
                Lang = _db.Language.ToList(),
                ViewDet = (from gh in _db.Grp
                           select new MultiDetailViewModel
                           {
                               PKey = gh.GrpID,
                               Txts = (from lang in _db.Language
                                      join gtxts in gh.GrpText on lang.LangID equals gtxts.LangID into jointxt
                                      from fintxt in jointxt.DefaultIfEmpty()
                                      select new MultiLangObject
                                      {
                                          LangId = lang.LangID,
                                          Txt =  fintxt != null ? fintxt.GrpTxt : ""
                                      })
                           }).ToList()
            };
    

    这是我的视图模型。

        public class DetailViewModel
    {
        public List<MultiDetailViewModel> ViewDet { get; set; }
        public List<Language> Lang { get; set; }
    }
    
    public class MultiDetailViewModel
    {
        public int PKey { get; set; }
        public IEnumerable<MultiLangObject> Txts { get; set; }
    }
    
    public class MultiLangObject
    {
        public string Txt { get; set; }
        public int LangId { get; set; }
    }
    


    这是我的观点。

    <table class="tblMult center">
            <thead>
                <tr>    
                <% foreach (var lang in Model.Lang)
                   { %>
                   <th><%=lang.LangName %></th>
                <%} %>
                    <th>Action</th>
                </tr>
            </thead>
            <% foreach (var g in Model.ViewDet)
               {%>
                <tr>
                    <% foreach (MultiLangObject gtxt in g.Txts)
                        {%>
                        <td> 
                            <%if (gtxt != null)
                              {%>
                                   <%: gtxt.Txt%>
                            <%}else{ %>
    
                            <%} %>
    
                        </td>
                    <%} %>
                    <td>
                        <a onclick="CallAction('/Group/EditForm/<%= g.PKey %>',event)">Edit</a>
    
                        <%= Html.ActionLink("Manage", "/Grpdesc/", new { id = g.PKey })%>
                        <%= Html.ActionLink("Delete", "Delete", new { id = g.PKey })%>
                    </td>
                </tr>
            <%} %>
        </table>
    


    如果有人有更好的方法来做这件事,请张贴。
    正如bastijn所说,我不认为将视图模型封装到视图模型中是正确的做法。