如何将属性传递给 html 帮助程序方法



我有一个用于我的网络表单项目的 html 帮助程序类。 到目前为止,它可以返回字符串来创建标签和只读字段。

Public Shared Function DisplayFor(value As String, Optional attributes As String = "") As String
    Return [String].Format("<span class='uneditable-input {0}'>{1}</span>", GetSStyle(attributes), value)
End Function

现在我想创建一些可以接受传递实体属性的重载,以便它可以在内部检查数据类型(来自属性)并显示格式化的内容,例如。就像MVC一样。

唯一的问题是我不知道如何将类属性作为函数参数传递。

可以将属性作为Expression(Of Func(Of MyModel, String))传递,并通过该属性在可以分析和计算的方法中接收表达式:

Public Shared Function DisplayFor(Of TModel, TValue)(model As TModel, expr As Expression(Of Func(Of TModel, TValue))) As String
    ' Retrieve the value dynamically
    Dim compExpr = expr.Compile()
    Dim value = compExpr.DynamicInvoke(model)
    Dim retVal As String
    If value Is Nothing Then
        retVal = String.Empty
    Else
        retVal = value.ToString()
    End If
    ' Analyze expression body
    Dim memberAccExpr = DirectCast(expr.Body, 
                          System.Linq.Expressions.MemberAccessExpression)
    Dim attr = memberAccExpr.Member.GetCustomAttributes(typeof(MyDisplayAttribute), false).Cast(Of MyDisplayAttribute)().FirstOrDefault();
    Return retVal
End Function

像这样调用该方法:

DisplayFor(myModelVar, Function(m) m.MyProperty)

我希望此示例能为您提供有关如何处理此问题的粗略概述。请注意,特别是简化了对表达式正文的分析。在实际代码中,将进行各种检查以确保表达式符合您的期望。

相关内容

  • 没有找到相关文章

最新更新