MVC 2查看模型数据问题

时间:2010-08-19 03:10:39

标签: asp.net-mvc model-view-controller view viewmodel

这是我的数据库结构

语言的 LangID PK
LangName nvarchar(100)

分类
CatID Pk
IsActive Bit

CategoryText
CatID FK CatName nvarchar(200)
LangID Int

语言
LangID | LangName
1 |英语
2 |法国

类别
CatID | IsActive
1 |真的 2 |真的 3 |真的

CategoryText
CatID | CatName | LangID
1 |汽车| 1
1 |自动| 2
2 |聊天| 2
3 |飞机| 1
3 | Avion | 2个


我将MVC 2与Framework Entity一起用作ORM 首先,我希望在html表格中有一个像那样的渲染视图 英语|法文
车|自动
NULL |聊天
飞机|艾维

这是我的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 

                   };

我的问题是如果我想在视图中添加其他东西,我不能,因为我的ViewModel封装在Linq循环中...
这就是我的意思:

 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 个答案:

答案 0 :(得分:0)

这是我控制器中的内容。

            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()
        };

这是我的View模型。

    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所说,我不认为将视图模型封装到视图模型中是正确的。