Asp.net mvc MVC2视图模型数据问题
这是我的数据库结构 语言 LangID PKAsp.net mvc MVC2视图模型数据问题,asp.net-mvc,model-view-controller,view,viewmodel,Asp.net Mvc,Model View Controller,View,Viewmodel,这是我的数据库结构 语言 LangID PK 朗格曼(100) 类别 CatID Pk i活动位 类别文本 CatID FK CatName nvarchar(200) LangID Int 语言 LangID | LangName 1 |英语 2 |法语 类别 CatID | IsActive 1 |正确 2 |正确 3 |正确 类别文本 CatID | CatName | LangID 1 |车| 1 1 |自动| 2 2 |聊天| 2 3 |平面| 1 3|Avion|2 我使用MVC
朗格曼(100) 类别
CatID Pk
i活动位
类别文本
CatID FK CatName nvarchar(200)
LangID Int
语言
LangID | LangName
1 |英语
2 |法语
类别
CatID | IsActive
1 |正确
2 |正确
3 |正确
类别文本
CatID | CatName | LangID
1 |车| 1
1 |自动| 2
2 |聊天| 2
3 |平面| 1
3|Avion|2
我使用MVC2和框架实体作为ORM。
首先,我希望在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
};
我的问题是,如果我想在视图中添加其他内容,我不能,因为我的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
};
像我在示例中所做的那样,将视图模型放入视图模型是一个好主意
谢谢这是我控制器里的东西。
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; }
}
public类DetailViewModel
{
公共列表ViewDet{get;set;}
公共列表语言{get;set;}
}
公共类多细节视图模型
{
public int PKey{get;set;}
公共IEnumerable Txts{get;set;}
}
公共类多语言对象
{
公共字符串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>
行动
编辑
如果有人有更好的方法来做这件事,请张贴
正如巴斯蒂金所说,我不认为将视图模型封装到视图模型中是正确的做法。老实说,我从来没有使用LINQ,但我想到的第一件事是使用var query=from cat in _db.Category。。。等等。作为评论发布,我甚至不确定这是否有效。嗨,bastijn,我使用SQL来创建实体。当我在Category中进行类似于var query=from cat的查询时,它将返回由FrameworkEntity生成的类别对象列表。我这里的问题是:将我的视图模型封装到其他视图模型中是否是一种好的做法。不,我认为不是。