Asp.net mvc 如何在ASP.NET MVC视图中使用函数?
我想在ASP.NET MVC视图中使用这样一个简单的函数。它接受一个整数参数并返回一个字符串Asp.net mvc 如何在ASP.NET MVC视图中使用函数?,asp.net-mvc,Asp.net Mvc,我想在ASP.NET MVC视图中使用这样一个简单的函数。它接受一个整数参数并返回一个字符串 Function FileSizeString(ByVal ByteCount As Integer) As String Select Case ByteCount Case Is < (2 ^ 10) Return ByteCount.ToString("N0") + "B" Case (2 ^ 10) To ((2 ^ 20)
Function FileSizeString(ByVal ByteCount As Integer) As String
Select Case ByteCount
Case Is < (2 ^ 10)
Return ByteCount.ToString("N0") + "B"
Case (2 ^ 10) To ((2 ^ 20) - 1)
Return (ByteCount / (2 ^ 10)).ToString("N0") + "KB"
Case (2 ^ 20) To ((2 ^ 30) - 1)
Return (ByteCount / (2 ^ 20)).ToString("N0") + "MB"
Case (2 ^ 30) To Integer.MaxValue
Return (ByteCount / (2 ^ 30)).ToString("N0") + "GB"
End Select
End Function
函数FileSizeString(ByVal ByteCount作为整数)作为字符串
选择大小写字节数
案例<(2^10)
返回ByteCount.ToString(“N0”)+“B”
案例(2^10)至((2^20)-1)
返回(字节数/(2^10)).ToString(“N0”)+“KB”
案例(2^20)至((2^30)-1)
返回(字节数/(2^20)).ToString(“N0”)+“MB”
大小写(2^30)到Integer.MaxValue
返回(字节数/(2^30)).ToString(“N0”)+“GB”
结束选择
端函数
我把它放在我的控制器中,但是我不能在我的视图中执行它。这会产生编译时错误“未声明名称'FileSizeString'
-
我需要把我的函数放在哪里?如何使我的视图能够访问它?一旦您在视图中,控制器已被释放-相反,您可以创建一个实用程序类并将方法放在那里,或者在int上创建一个扩展方法。您可以将其作为扩展方法添加到类中。然后可以通过视图的属性调用它
下面是一个如何执行的示例。您需要将其设置为一个HtmlHelper exentsion方法
完成此操作后,请确保导入extenstion方法所在的命名空间,以便视图中的Html对象了解它。您可能需要查看Html扩展方法。您可以这样创建一个:
Public Module FileSizeExtension
<Extension()> _
Public Shared Function FileSizeAsString(ByVal helper AS HtmlHelper,
ByVal byteCount As Integer) As String
Select Case ByteCount
Case Is < (2 ^ 10)
Return ByteCount.ToString("N0") + "B"
Case (2 ^ 10) To ((2 ^ 20) - 1)
Return (ByteCount / (2 ^ 10)).ToString("N0") + "KB"
Case (2 ^ 20) To ((2 ^ 30) - 1)
Return (ByteCount / (2 ^ 20)).ToString("N0") + "MB"
Case (2 ^ 30) To Integer.MaxValue
Return (ByteCount / (2 ^ 30)).ToString("N0") + "GB"
End Select
End Function
End Module
我真的不喜欢HtmlHelper扩展建议。这似乎不适合这个用途 相反,我在Document类中添加了一个函数:
Partial Public Class Document
Function FileSizeString() As String
Select Case Me.FileSize
Case 1 To ((2 ^ 10) - 1)
Return Me.FileSize.ToString("N0") + "B"
Case (2 ^ 10) To ((2 ^ 20) - 1)
Return (Me.FileSize / (2 ^ 10)).ToString("N0") + "KB"
Case (2 ^ 20) To ((2 ^ 30) - 1)
Return (Me.FileSize / (2 ^ 20)).ToString("N0") + "MB"
Case (2 ^ 30) To Integer.MaxValue
Return (Me.FileSize / (2 ^ 30)).ToString("N0") + "GB"
Case Else
Throw New ArgumentOutOfRangeException("byteCount", "Value must be a positive integer.")
Return "unknown size"
End Select
End Function
End Class
我在ASP.NET MVC视图中使用的:
<ul>
<% For Each d As Document In Model.Attachments%>
<li>
<a href="<%=Url.RouteUrl("Download", New With {.id = d.Id}) %>">
<%=d.FileName %> (<%=d.FileSizeString %>)
</a>
</li>
<% Next %>
</ul>
-
如果它专门用于此视图,那么它应该进入视图的ViewModel中。如果它是跨多个视图共享的,那么扩展HtmlHelper就是一种选择。但是,如果将它添加到所讨论的模型类中(这基本上意味着重写ToString()方法或添加一个新方法),如果它不返回HTML,而只返回一个可以在其他部分中使用的原始字符串,那么将它添加到模型类中是很好的。文档(据我所知)是您的数据模型,因此它应该只关心它作为一个数字的大小;这个数字的实际可视化应该留给表示层——视图(如果您有一个公共的基本视图类)、HtmlHelper类或另一个与表示相关的类。我认为专门的文件大小数据类型最适合所有层。我想知道数据注释是否是一个很好的解决方案。我需要更多地了解这一点。
Partial Public Class Document
Function FileSizeString() As String
Select Case Me.FileSize
Case 1 To ((2 ^ 10) - 1)
Return Me.FileSize.ToString("N0") + "B"
Case (2 ^ 10) To ((2 ^ 20) - 1)
Return (Me.FileSize / (2 ^ 10)).ToString("N0") + "KB"
Case (2 ^ 20) To ((2 ^ 30) - 1)
Return (Me.FileSize / (2 ^ 20)).ToString("N0") + "MB"
Case (2 ^ 30) To Integer.MaxValue
Return (Me.FileSize / (2 ^ 30)).ToString("N0") + "GB"
Case Else
Throw New ArgumentOutOfRangeException("byteCount", "Value must be a positive integer.")
Return "unknown size"
End Select
End Function
End Class
<ul>
<% For Each d As Document In Model.Attachments%>
<li>
<a href="<%=Url.RouteUrl("Download", New With {.id = d.Id}) %>">
<%=d.FileName %> (<%=d.FileSizeString %>)
</a>
</li>
<% Next %>
</ul>