2

http://dataannotationsextensions.org/の DataAnnotationsExtensions を使用しています

ここからの例でhttp://weblogs.asp.net/srkirkland/archive/2011/02/23/introducing-data-annotations-extensions.aspx

コントローラーコード

    public ActionResult Create(Dog dog, HttpPostedFileBase Picture)
    {
        Regex rgx = new Regex(@"^.*\.(jpg|gif|jpeg|png)$");
        Match m = rgx.Match(Picture.FileName);

        if (rgx.IsMatch(Picture.FileName))
            {
                if (ModelState.IsValid)
                {

型式コード

[FileExtensions("png|jpg|jpeg|gif", ErrorMessage = "Only jpg jpeg gif or png files allowed")]
        public string Picture { get; set; }

そしてかみそりのコード

@Html.TextBoxFor(model => model.Picture, new { type = "file" })
@Html.ValidationMessageFor(model => model.Picture)

私がすることはすべて失敗します

if (ModelState.IsValid)

FileExtensions Annotation を削除すると問題なく動作しますが、不要なファイル タイプをブロックできなくなります。

ここにあるデータ注釈拡張のコードを確認するところまで行きました https://github.com/srkirkland/DataAnnotationsExtensions/blob/master/DataAnnotationsExtensions/FileExtensionsAttribute.cs

そして、私はまだ問題がどこにあるのかを見つけることができないようです.

4

1 に答える 1

0

モデル バインダーが、モデルの「Picture」という名前のプロパティと「Picture」というHttpPostedFileBase名前のパラメーターと混同されていると思います。

HttpPostedFileBaseパラメータを 'Picture' 以外のものに更新すると、モデル バインダーは正常に動作するはずです。例:

public ActionResult Create(Dog dog, HttpPostedFileBase UploadedPicture)
于 2012-08-08T15:14:44.043 に答える