我收到以下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无效,上面的错误显然是原因。我对错误的本质感到非常困惑。类似的代码适用于其他视图和操作。
有人能指出我可能导致这种情况的方向吗?
答案 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,找到表单元素和'操作'属性将在那里提供所有参数,这些参数将在提交表格时回发给服务员。