2013-08-30 22 views
1

我正在循環瀏覽剃鬚刀視圖中的數據集。我是MVC和Razor的新手。 ASP.net背景。將動態數據傳遞給視圖函數MVC

@foreach (System.Data.DataRow _row in Model.Rows) 
{ 
     <tr> 
      <td>@_row["FileNameShort"].ToString()</td> 
      <td>@_row["FileSize"]</td> 
      <td><a href="[email protected]_row["ID"].ToString()">View</a></td> 
     </tr> 
} 

我需要文件大小在MB,GB,KB都是爵士樂。它以字節爲單位。 我已經在視圖上放置了一個函數來設置它的格式。我在其他地方找到的東西,但它應該工作得很好。

@functions { 

    List<string> suffixes = new List<string> { " B", " KB", " MB", " GB", " TB", " PB" }; 
    string Numeric2Bytes(int number) 
    { 
     for (int i = 0; i < suffixes.Count; i++) 
     { 
      int temp = number/(int)Math.Pow(1024, i + 1); 
      if (temp == 0) 
       return (number/(int)Math.Pow(1024, i)) + suffixes[i]; 
     } 
     return number.ToString(); 
    } 

    string test(int number) 
    { 

     return number.ToString(); 
    } 
} 

如果我只是這樣做:

<td>Numeric2Bytes(@_row["FileSize"])</td> 

它抱怨說,它的參數無效,即使它在數據集中的INT。

做我需要做的事情的最佳方法是什麼?

+0

ÿ在進入視圖之前,您應該完成所有需要顯示的處理。 – zimdanen

+0

@zimdanen同意,但有人可能會爭辯說,大小格式爲GB,TB,KB是一個顯示問題,應該在視圖中完成。 –

回答

1

你知道這是int,但DataRow.Item財產返回object。你需要施放它。

<td>Numeric2Bytes((int)@_row["FileSize"])</td>

1

嘗試:

<td>@Numeric2Bytes(Int32.Parse(_row["FileSize"]))</td> 

<td>Numeric2Bytes(@Int32.Parse(_row["FileSize"]))</td>