0

モデルに「int?」型の「ID」というプロパティがあります。そして、ビューで

@Html.HiddenFor(m => m.ID)

Model.ID が null の場合、隠しフィールドの値は空の文字列になり、ポストバック時に ModelState.IsValid はエラーのために false を返します。

"Object of type 'System.String' cannot be converted to type 'System.Nullable`1[System.Int32]'."

私は正確に何を間違っていますか?

4

4 に答える 4

0

私たちのソリューションではこれを毎日行っていますが、それはまったく問題ではありません。例として、モデルの 1 つを次に示します。

public class ClassifiedAd : BaseModel
{
    [Key]
    [Editable(false)]
    public int? ClassifiedAdID { get; set; }

    [Required(ErrorMessage = "Required!")]
    public int? UserID { get; set; }

    [Required(ErrorMessage = "Required!")]
    public int? ClassifiedAdCategoryID { get; set; }

    [Required(ErrorMessage = "Required!")]
    [StringLength(15, ErrorMessage = "Limited to 15 characters!")]
    [RegularExpression(RegularExpressions.USPhone, ErrorMessage = "Must be a valid phone number!")]
    public string Phone { get; set; }

    [Required(ErrorMessage = "Required!")]
    [RegularExpression(RegularExpressions.SafeAlphaNumeric, ErrorMessage = "Only letters, numbers, dashes and underscores are allowed!")]
    [StringLength(100, ErrorMessage = "Limited to 100 characters!")]
    public string AddTitle { get; set; }
}

ご覧のとおり、すべてのモデル プロパティに null 許容型を使用しています。ただし、これにより、説明した問題は発生しません。私たちの見解では、次のとおりです。

@Html.HiddenFor(model => model.ClassifiedAdID)
@Html.HiddenFor(model => model.UserID)

すべてがマップされ、正常に動作します。何が問題の原因なのかはわかりませんが (それを理解するにはコード全体を確認する必要があります)、ここで他の可能性を検討する必要があると思います。どのバージョンの MVC を使用していますか?

于 2013-06-19T20:39:59.790 に答える
0

まあ、これは一般的な動作ではありません。プロジェクトで DefaultModelBinder を拡張していたため、null 値が空の文字列に変換され、それがエラーの原因でした。

于 2013-06-19T20:15:56.493 に答える