接口'System.Web.Mvc.IValueProvider'无法编入索引,因为它没有默认属性

时间:2009-11-19 20:37:01

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

这曾经有用。

<AcceptVerbs(HttpVerbs.Post)> _
Function Widget(ByVal collection As FormCollection) As ActionResult
    ...
    If ... Then
        ModelState.AddModelError(...)
        ModelState.SetModelValue("Gadget", collection.ToValueProvider("Gizmo"))
        Return View()
    End If
    ...
End Function

我升级到 ASP.NET MVC 2 Beta ASP.NET MVC 2 Futures Assembly for Beta ,现在ToValueProvider()因编译时错误而失败:

  

接口   'System.Web.Mvc.IValueProvider'不能   被索引,因为它没有默认值   属性

如果没有使用ModelState.SetModelValue(),如何使用collection.ToValueProvider()

3 个答案:

答案 0 :(得分:2)

摘自ASP.NET MVC 2 Beta发行说明:

  

ASP.NET MVC 2 Beta中的更改

     

推出了IValueProvider   界面,取代所有用法   IDictionary&lt; string,   ValueProviderResult&GT;

     

每个属性或方法参数   接受的IDictionary&lt; string,   ValueProviderResult&GT;现在接受了   IValueProvider。这种变化会影响   仅包含自定义的应用程序   价值提供者或定制模型   粘合剂。

     

属性和方法的示例   受此变化影响的人   包括以下内容:

     
      
  • ControllerBase和ModelBindingContext的ValueProvider属性   类。
  •   
  • Controller类的TryUpdateModel方法。
  •   
  • Site.css文件中添加了用于样式化的新CSS类   验证信息。
  •   

HTHS,
查尔斯

答案 1 :(得分:0)

只需删除字符串参数。

错:

collection.ToValueProvider("Gizmo")

正确:

collection.ToValueProvider()

更新

发布到Web服务器后创建新的运行时错误:

  

找不到方法:   “System.Web.Mvc.IValueProvider   System.Web.Mvc.FormCollection.ToValueProvider()”

.NET Framework 4 Beta 2 下载并安装到网络服务器上。

Microsoft Download Center: Microsoft .NET Framework 4 Beta 2

答案 2 :(得分:0)

我已完成以下操作并且正在运作。

ModelState.SetModelValue(“Gadget”,ValueProvider.GetValue(ControllerContext,“Gizmo”));

尚未尝试部署它。