这是我的数据库结构
语言的
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放入视图模型中是一个好主意,就像我在示例中一样。
由于
答案 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所说,我不认为将视图模型封装到视图模型中是正确的。