2011-04-04 113 views
1

我試圖列出所有「用戶組」,並且如果「UsergroupPrices」中存在值,則在文本框中顯示它。但我不確定如何獲得價值。在foreach循環中獲取值

<% 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

UserGroups和UsergroupPrice之間是什麼類型的關係?描述你的實體關係 – 2011-04-04 07:31:06

回答

2

我懷疑你只是在尋找Single或可能SingleOrDefault

var price = Model.BookingObject.UsergroupPrices 
           .Where(x => x.UsergroupID == item.UsergroupID) 
           .Select(x => (decimal?) x.Price) 
           .SingleOrDefault(); 

(鑄塑到decimal?是讓SingleOrDefault返回空decimal?值,而不是0,如果沒有發現匹配)

請注意,儘管您當前的代碼將進行大量數據庫查詢,但前提是這些代碼實際上與數據庫上下文相關聯。您可能應該在控制器中執行這些查詢,而不是查看...在控制器中獲取所需的所有數據,並以最簡單的方式將其放入模型中以供視圖顯示。

2

您需要選擇一個記錄:

var price = Model 
    .BookingObject 
    .UsergroupPrices 
    .Where(x => x.UsergroupID == item.UsergroupID) 
    .FirstOrDefault(x => x.Price); 

,然後你可以測試,如果價格是零。

這就是說我必須說,你在做什麼是錯的。提取數據不是視圖的責任。這應該由控制器完成。控制器應該填充視圖模型並將該模型傳遞給視圖。此視圖模型包含視圖所需的所有必要屬性,以便在視圖內部只需顯示它們。 這樣的代碼不屬於視圖

所以我會強烈建議你將這個邏輯驅逐到控制器中,因爲現在你違反了MVC模式。