2

私はそれを簡単に説明しようとします:

次のようなエンティティ - イメージ - があります。

public class Image : IEntity
    {
        public int ID
        {
            get;
            set;
        }
        public string name
        {
            get;
            set;
        }
        public virtual ICollection<Restaurant> Restaurant
        {
            get;
            set;
        }
    }
}

Restaurant エンティティ クラスの関連プロパティは次のとおりです。

[HiddenInput(DisplayValue = false)]
public Guid ImageID { get; set; }
public string ImageName { get; set; }
public virtual Image Image
        {
            get;
            set;
        }
        
        public byte[] ImageData 
        { 
            get; set; 
        }
        [HiddenInput(DisplayValue = false)]
        public string ImageMimeType 
        { 
            get; set; 
        }

そして、ユーザーが画像を取得してアップロードしてユーザー用に保存する私のビューでは<input type="file" name="image" />、 enctype = "multipart/form-data" の単純な があります。この場合のユーザーは、エンティティ (レストラン) です。

@using (Html.BeginForm("Edit", "Admin", FormMethod.Post, new { enctype = "multipart/form-data" }))

[...]

<input type="file" name="image" />

[...]

これは、投稿された画像(およびhtmlからの他のデータ)を処理する必要があるAdminControllerのActionResultです。

[HttpPost]
        public ActionResult Edit(Restaurant rest, Address address, HttpPostedFileWrapper image)
        {
            if (ModelState.IsValid)
            {
                if (image != null && image.ContentLength > 0)
                {
                    var filename = Path.GetFileName(image.FileName);
                    Guid imageID = Guid.NewGuid();
                    var relativePath = @"~/Content/Images/Logotypes/" + imageID.ToString();
                    image.SaveAs(Server.MapPath(relativePath));

                    rest.ImageMimeType = image.ContentType;
                    rest.ImageName = filename;
                    rest.ImageID = imageID;

                    repo.Save(rest);
                }
                return View(rest);
            }
            else
            {
                var errors = ModelState
                .Where(x => x.Value.Errors.Count > 0)
                .Select(x => new { x.Key, x.Value.Errors })
                .ToArray();

                return View(rest);
            }
        }

コードを実行すると、ModelState.IsValid() は false を返し、ModelState エラーは次のようになります。

{System.InvalidOperationException: 型 'System.Web.HttpPostedFileWrapper' から型 'Projct.Domain.Entities.Image' へのパラメーター変換は、型コンバーターがこれらの型間で変換できないため、失敗しました。

何か案は?

4

1 に答える 1

8

<input type="file"モデルバインダーは、名前が付けられた要素をクラスimageImageプロパティにバインドしようとしますRestaurant

アクションの 2 番目のパラメーターと、<input type="file要素に 以外の名前を付けるだけimageです。

于 2012-11-08T10:51:58.813 に答える