【发布时间】:2014-05-02 00:01:32
【问题描述】:
我目前正在开发一个 ASP.NET MVC3 项目。
我已经实现了一个自定义 IModelBinder 类。在 BindModel 方法中,我试图检索一个项目的 ID(GUID),如下所示:
Public Class MyViewModelModelBinder
Implements IModelBinder
Public Function BindModel(controllerContext As System.Web.Mvc.ControllerContext, bindingContext As System.Web.Mvc.ModelBindingContext) As Object Implements System.Web.Mvc.IModelBinder.BindModel
Dim myVM As MyViewModel
If (bindingContext.Model IsNot Nothing AndAlso TypeOf bindingContext.Model Is MyViewModel) Then
myVM = DirectCast(bindingContext.Model, MyViewModel)
Else
myVM = New MyViewModel
End If
Dim proposedObjectID As Guid = GetValue(Of Guid)(bindingContext, "ObjectID")
myVM.ObjectID = proposedObjectID
'...'
Return myVM
End Function
Private Function GetValue(Of T)(ByVal bindingContext As ModelBindingContext, ByVal key As String) As T
Dim returnValue As T = Nothing
Dim valueResult As ValueProviderResult
valueResult = bindingContext.ValueProvider.GetValue(key)
If valueResult IsNot Nothing Then
Try
returnValue = DirectCast(valueResult.ConvertTo(GetType(T)), T)
Catch ex As Exception
returnValue = Nothing
End Try
End If
Return returnValue
End Function
End Class
我遇到的问题在于GetValue 方法,因为bindingContext.ValueProvider.GetValue(key) 方法返回null/nothing。有人会认为这是因为键和/或值不在ValueProvider 中,但事实并非如此......即使有一个键和一个值,ModelBindingContext.ValueProvider.GetValue 也返回 null/nothing我正在尝试检索的项目。
我可以通过执行以下操作来检索 ID:
Public Function BindModel(controllerContext As System.Web.Mvc.ControllerContext, bindingContext As System.Web.Mvc.ModelBindingContext) As Object Implements System.Web.Mvc.IModelBinder.BindModel
Dim proposedObjectID As Guid
Guid.TryParse(CType(bindingContext.ValueProvider, FormCollection)("ObjectID"), proposedObjectID)
'...'
End Function
但我很难理解为什么 GetValue 方法没有正确检索值。
你能解释一下我做错了什么吗?
谢谢。
【问题讨论】:
-
我发现了我的问题。我不小心在我提供给
GetValue方法的密钥末尾添加了一个空格。哎呀! 脸红
标签: asp.net .net asp.net-mvc-3 binding