我在HtmlHelper上创建了SumFor
扩展方法。目的是从模型中获取属性并计算所有值的总和并将其返回。这有效,但该值以纯字符串形式返回。例如:
130.50
我经常在我的属性上使用自定义属性,例如
<Percentage>
Public Property Amount As Decimal
和
<Currency>
Public Property Amount As Decimal
在〜/ Views / Shared / DisplayTemplates 中使用DisplayTemplates Percentage.vbhtml 和 Currency.vbhtml 。
这些渲染字符串如:
80%
$130.50
(虽然有点复杂)
这是我的货币方法:
<Extension>
Public Function SumFor(Of TModel As IEnumerable(Of Object),
TProperty As ModelMetadata) _
(helper As HtmlHelper(Of TModel),
expression As Expression(Of Func(Of TModel, TProperty))) _
As IHtmlString
Dim data As ModelMetadata
Dim viewName As String = String.Empty
Dim sum As String
data = expression.Compile.Invoke(Nothing)
sum = data.GetSum(helper.ViewData.Model)
If data.DataTypeName IsNot Nothing Then viewName = data.DataTypeName
If data.TemplateHint IsNot Nothing Then viewName = data.TemplateHint
Return helper.Partial(viewName, sum)
End Function
正如您所看到的,我正在尝试使用帮助程序的Partial方法来确保使用正确的显示模板。但我得到一个错误,说无法找到该视图。我希望像使用普通DisplayFor
一样使用我的和值,以便选择显示模板,但我不知道如何将HtmlHelper与 sum 字符串一起使用。
我觉得我的方式错了。什么是最好的解决方案?