MVC2:无法将String转换为ExtensionDataObject(不知道我想要)

时间:2010-01-04 19:35:02

标签: asp.net-mvc validation invalidoperationexception

我收到以下InvalidOperationException:

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页面上的Post动作中,但我真的不确定它指的是什么。我正在使用数据注释验证:

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。我只是创建名称与FamilyPerson匹配的控件然后提交表单,但由于某种原因我的ModelState无效,上面的错误显然是原因。我对错误的本质感到非常困惑。类似的代码适用于其他视图和操作。

有人能指出我可能导致这种情况的方向吗?

4 个答案:

答案 0 :(得分:2)

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

"{0:d"应为"{0:d}"

答案 1 :(得分:1)

以下是问题的实际解释,以及如何解决问题:http://www.shawson.co.uk/codeblog/mvc-strongly-typed-view-returns-a-null-model-on-post-back/comment-page-1/

简短摘要:不要为您的视图参数指定与模型字段相同的名称,除非它们代表相同的值(并且具有相同的类型)。

答案 2 :(得分:0)

它似乎已经独立消失了。怪异。

答案 3 :(得分:0)

这可能有助于某人:

我抛出了这个异常,因为我在视图中有多个表单。

然而,其中一个表格没有明确设定“行动”。属性。也就是说,我正在使用这个构造函数:

@using (Html.BeginForm())

而不是这一个:

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

这将导致使用表单发布不正确的参数。实际上,业务模型对象在不应该包含在表单中时被包含在表单中。反过来,当.Net试图将System.String转换为业务模型对象时,它不应该尝试这样的转换。

解决方案是使用后来的重载方法并确保正确的“动作”。在回发时为您的表单设置了属性。

仅供参考:检查“行动”'您的表单的属性,使用FireBug并检查HTML,找到表单元素和'操作'属性将在那里提供所有参数,这些参数将在提交表格时回发给服务员。