将动态数据传递给视图函数MVC

本文关键字:视图 函数 MVC 动态 数据 | 更新日期: 2023-09-27 18:29:37

我正在剃刀视图中循环浏览数据集。我是MVC和Razor的新手。ASP.net背景。

    @foreach (System.Data.DataRow _row in Model.Rows)
{
        <tr>
            <td>@_row["FileNameShort"].ToString()</td>
            <td>@_row["FileSize"]</td>
            <td><a href="DocViewer.aspx?rowid=@_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。

做我需要做的事情最好的方法是什么?

将动态数据传递给视图函数MVC

您知道它是int,但DataRow.Item属性返回object。你需要铸造它。

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

尝试:

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

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

使用自定义HTML帮助程序,请参阅链接:

http://www.asp.net/mvc/tutorials/older-versions/views/creating-custom-html-helpers-cs