2013-05-28 99 views
0

我有@model IEnumerable<HotelWithRating> - 一些酒店。 在視圖中,我有5個複選框 - 酒店的星星。混合JavaScript和C#

<table> 
    <tr> 
     <td>1</td> 
     <td>2</td> 
     <td>3</td> 
     <td>4</td> 
     <td>5</td> 
    </tr> 
    <tr> 
     <td><input type = 'checkbox' value="false" id= '1' onclick = ' ShowHotels();'/></td> 
     <td><input type = 'checkbox' value="false" id= '2' onclick = ' ShowHotels();'/></td> 
     <td><input type = 'checkbox' value="false" id= '3' onclick = ' ShowHotels();'/></td> 
     <td><input type = 'checkbox' value="false" id= '4' onclick = ' ShowHotels();'/></td> 
     <td><input type = 'checkbox' value="false" id= '5' onclick = ' ShowHotels();'/></td> 
    </tr> 
</table> 

我需要顯示的酒店有例如5或4星(如果第四和第五個複選框被選中)。

應該是這樣的

<table class="Grid"> 
    <tr> 
     <th>Name</th> 
     <th>Stars</th>  
     <th>Rating</th> 
     <th>Description</th>    
    </tr> 
    <script type="text/javascript"> 
     function ShowHotels() 
     { 
       @foreach (var item in Model) 
        { 
         <text> 
         if (document.getElementById(item.Hotel.stars).checked == true) 
         { 
          <tr> 
          <td>@item.Hotel.Name</td> 
          <td>@item.Hotel.Stars</td> 
          <td>@item.Rating</td> 
          <td>@item.Hotel.Description</td> 
          </tr> 
         } 
         </text> 
        } 
     } 
    </script> 
</table> 

我發現關於混合代碼JavaScript的許多問題,但還沒有一個決定。

+1

那麼你不能這樣做對不起 - 你正在發送HTML到JavaScript塊。如果您想動態更改在運行時可見的酒店集合,那麼您需要將所有酒店寫入頁面,可能使用「display:none」樣式來隱藏您不想顯示的初始集合,然後通過JavaScript控制錶行的可見性 - 或者您可以生成一個空表,然後通過AJAX加載您需要的數據集以及您需要的任何額外行。 – Rup

+0

謝謝U.現在我不能設置風格。我這樣做:row = document.getElementsByClassName(id +「stars」); for(var i = 0; i Stalli

+0

我認爲更好地過濾服務器上的數據。 – Xordal

回答

0

更好的是首先根據複選框選擇過濾模型。它可以在客戶端通過比較模型中的每家酒店的屬性來完成。否則,您也可以使用AJAX(發送所選複選框的信息,然後服務器將向您發送過濾模型)進行服務器端過濾。服務器端過濾更好是你有大量的酒店要查看。

然後將此過濾模型分配給網格或使用JavaScript爲過濾模型中的每個元素使用for循環生成表。

隨意問任何進一步的問題,如果你得到。謝謝。