ASP.Net MVC Viewmodel Set基于其他属性的属性值

时间:2013-11-05 12:55:01

标签: asp.net asp.net-mvc vb.net asp.net-mvc-4

我一直在阅读很多关于如何创建自己的ASP.NET MVC DefaultModelBinder的问题,这是我认为我需要的。

因此,简而言之,我需要从模型属性中提取一些信息并将其添加到同一模型上的其他属性中。我认为在属性上有一个属性告诉这是要从中提取的属性,然后指定其他属性的名称,这样就好了,这样会很好:

Public Class MyModel
    <MyAttribute(ExtraInfoProperty:="ExtraInfo")>
    Public Property MyProperty As String

    Public Property ExtraInfo As String
End Class

然后我会像这样创建自己的DefaultModelBinder

Public Class MyModelBinder
    Inherits DefaultModelBinder

       Protected Overrides Sub SetProperty(controllerContext As System.Web.Mvc.ControllerContext, bindingContext As System.Web.Mvc.ModelBindingContext, propertyDescriptor As System.ComponentModel.PropertyDescriptor, value As Object)
        For Each attribute As Attribute In propertyDescriptor.Attributes
            If TypeOf attribute Is MyAttribute Then
                Dim extraInfo As String = ExtractExtraInfo(value)
                ' Set to ExtraInfo-property
            End If
        Next

        MyBase.SetProperty(controllerContext, bindingContext, propertyDescriptor, value)
    End Sub
End Class

但是SetProperty是正确的方法还是我需要覆盖BindProperty或其他什么?你会怎么做?

由于

1 个答案:

答案 0 :(得分:0)

我认为这里不需要自定义绑定/属性的开销。如果此处ExtraInfo的目的仅仅是来自另一个属性的额外特定信息,为什么不将这些信息保留在模型本身中,例如。

Public Class MyModel

    Public Property MyProperty As String

    Public Property ExtraInfo As String
        Get
            Return MyProperty.Substring(0, 4);
        End Get
    End Property

End Class