【问题标题】:ModelBindingContext.ValueProvider.GetValue returning nothing even though there is a key for the value I am retrievingModelBindingContext.ValueProvider.GetValue 什么也不返回,即使我正在检索的值有一个键
【发布时间】: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


【解决方案1】:

我发现了问题!

我不小心在提供给GetValue 方法的密钥末尾添加了一个空格。所以,我的收藏中实际上不存在密钥(带有附加空格)!

【讨论】:

    猜你喜欢
    • 2022-07-12
    • 2019-10-25
    • 1970-01-01
    • 1970-01-01
    • 2012-09-09
    • 1970-01-01
    • 1970-01-01
    • 2020-03-25
    • 1970-01-01
    相关资源
    最近更新 更多