2010-01-04 102 views
0

我得到以下InvalidOperationException异常:MVC2:不能将字符串转换为ExtensionDataObject(不知道我想)

The parameter conversion from type 'System.String' to type 'System.Runtime.Serialization.ExtensionDataObject' failed because no type converter can convert between these types. 

在我的ASP.Net MVC2页面上张贴的动作,但我真的不知道它指的是什么。我使用的数据注释验证:

public class FamilyPersonMetadata 
{ 
    [Required(ErrorMessage = "Name Required")] 
    public String Name; 

    [Required(ErrorMessage = "Date of Birth required")] 
    [DateTime(ErrorMessage = "Invalid Date")] 
    [DisplayFormat(ApplyFormatInEditMode = true, DataFormatString = "{0:d")] 
    public DateTime DateOfBirth; 
} 

[MetadataType(typeof(FamilyPersonMetadata))] 
public partial class FamilyPerson 
{ 
} 

而从用的ViewPage的FamilyPerson亚型我的观点inhertis。我只是使用与FamilyPerson相匹配的名称创建控件,然后提交表单,但由于某种原因,我的ModelState无效,上述错误显然是原因。对于错误的性质我很困惑。类似的代码适用于其他视图和操作。

有人能指点我的事情的方向看,可能会导致这种情况吗?

+0

如果您注释掉MetadataType属性,会发生什么情况?一切正常吗?尝试并消除此问题中的某些变量将会有所帮助。 – Eilon 2010-01-09 21:07:54

回答

0

它似乎已经消失在了自己。奇怪的。

2

关于[DisplayFormat(ApplyFormatInEditMode = true, DataFormatString = "{0:d")]

"{0:d"应该"{0:d}"

+0

好的。可悲的是,我在改变之后仍然会遇到同样的例外情况。 – 2010-01-04 21:23:53

0

这可以帮助别人:

我有此异常被抛出,因为我已经在我看来mulitiple形式。

但是其中一种形式没有明确设置'action'属性。也就是说,我用这个构造:

@using (Html.BeginForm()) 

而是这一个:

@using (Html.BeginForm("ACTION_METHOD", "CONTROLLER", FormMethod.Post, null)) 

这将导致不正确的参数被张贴与形式。简而言之,商业模式对象被包含在窗体上时,它不应该。反过来,.Net然后试图将System.String转换为业务模型对象,当它不应该尝试这样的转换。

解决方法是使用稍后重载的方法,并确保在回发时为您的窗体设置了正确的'action'属性。

供参考:检查你的表单的'action'属性,使用FireBug并检查HTML,找到Form元素,'action'属性将会出现在那里,所有参数将被发回给serber该表单已提交。