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ページの投稿アクションで、それが何を指しているのかよくわかりません。データ注釈の検証を使用しています:

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

これは誰かを助けるかもしれません:

ビューに複数のフォームがあるため、この例外がスローされました。

ただし、フォームの 1 つで、'action' 属性が明示的に設定されていませんでした。つまり、私はこのコンストラクタを使用していました:

@using (Html.BeginForm())

これの代わりに:

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

これにより、誤ったパラメーターがフォームと共にポストされます。具体的には、ビジネス モデル オブジェクトが含まれてはならないときにフォームに含まれていました。次に、.Net は System.String をビジネス モデル オブジェクトに変換しようとしましたが、そのような変換を試みるべきではありませんでした。

解決策は、後でオーバーロードされたメソッドを使用し、ポストバック時にフォームに正しい 'action' 属性が設定されていることを確認することです。

参考までに: フォームの「アクション」属性を調べるには、FireBug を使用して HTML を調べ、フォーム要素を見つけます。「アクション」属性は、そのフォームが送信されたときにサーバーにポストバックされるすべてのパラメーターとともに存在します。 .

于 2012-02-06T00:39:34.840 に答える