我正在尝试列出所有“用户组”,如果“UsergroupPrices”中存在一个值,则在文本框中显示它。但我不确定如何掌握价值。
<% foreach (var item in Model.Usergroups)
{
var price = Model.BookingObject.UsergroupPrices.Where(x => x.UsergroupID == item.UsergroupID).Select(x => x.Price);
%>
<tr>
<td><%= Html.Hidden("UsergroupIDPrice", item.UsergroupID) %><%= item.UsergroupName %>:</td>
<td><%= Html.TextBox("UsergroupPrice", price) %></td>
</tr>
<% } %>
价格是十进制,如果用户组没有任何价格,则可能为空。
TIA
/拉塞
答案 0 :(得分:2)
您需要选择一条记录:
var price = Model
.BookingObject
.UsergroupPrices
.Where(x => x.UsergroupID == item.UsergroupID)
.FirstOrDefault(x => x.Price);
然后你可以测试价格是否为空。
这就是说我必须说你所做的是错的。获取数据不是视图的责任。这应该由控制器完成。控制器应填充视图模型并将此模型传递给视图。此视图模型包含视图所需的所有必需属性,因此在视图中您只需显示它们。 此类代码不属于视图。
所以我强烈建议您将此逻辑驱逐到控制器中,因为您现在违反了MVC模式。
答案 1 :(得分:2)
我怀疑你只是在寻找Single
或可能SingleOrDefault
:
var price = Model.BookingObject.UsergroupPrices
.Where(x => x.UsergroupID == item.UsergroupID)
.Select(x => (decimal?) x.Price)
.SingleOrDefault();
(对decimal?
的强制转换是为了使SingleOrDefault
返回空decimal?
值而不是0,如果找不到匹配项。)
请注意,您当前的代码将会进行大量的数据库查询,假设它们实际上与数据库上下文相关联。您可能应该在控制器中进行这些查询,而不是视图...在控制器中获取所需的所有数据,并以最简单的方式将其放入模型中以供显示视图。