0

我收到以下 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
{
}

我的视图继承自具有 FamilyPerson 子类型的 ViewPage。我只是创建名称与 FamilyPerson 匹配的控件,然后提交表单,但由于某种原因,我的 ModelState 无效,上述错误显然是原因。我对错误的性质感到非常困惑。类似的代码适用于其他视图和操作。

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

4

4 回答 4

2

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

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

于 2010-01-04T19:39:04.653 回答
1

这是对问题的实际解释以及解决方法:http ://www.shawson.co.uk/codeblog/mvc-strongly-typed-view-returns-a-null-model-on-post-back/评论页面 1/

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

于 2011-01-23T19:22:38.417 回答
0

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

于 2010-01-09T20:54:44.037 回答
0

这可能会帮助某人:

我抛出了这个异常,因为我认为我有多种形式。

然而,其中一种形式没有明确设置“动作”属性。也就是说,我正在使用这个构造函数:

@using (Html.BeginForm())

而不是这个:

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

这将导致与表单一起发布的参数不正确。具体来说,业务模型对象不应该包含在表单中。反过来,当.Net 不应该尝试这种转换时,它会尝试将 System.String 转换为业务模型对象。

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

仅供参考:要检查表单的“action”属性,请使用 FireBug 并检查 HTML,找到 Form 元素,并且“action”属性将包含所有参数,这些参数将在提交表单时发回服务器.

于 2012-02-06T00:39:34.840 回答