2016-10-03 1 views
0

私はasp mvc 5に写真をアップロードする必要があります。Fillモデル私がHttpPostedFileBaseを使うとき

でも画像を選択するとThe UserPhoto field is required.に表示されます。

この私のコード:

public async Task<ActionResult> Register(RegisterViewModel model, HttpPostedFileBase pic) 
    { 
     if (ModelState.IsValid) 
     { 
      if (pic != null) 
      { 
       pic = Request.Files[0]; 
       var ext = System.IO.Path.GetExtension(pic.FileName); 
       if (ext == ".jpg" || ext == ".png" || ext == ".jpeg") 
       { 
        string filename = model.Name + model.PhoneNumber + ext; 
        pic.SaveAs(@"~/Image/" + filename); 
        model.UserPhoto = filename; 
       } 
      } 
      var user = new ApplicationUser { Name = model.Name, Family = model.Family, PhoneNumber = model.PhoneNumber, UserName = model.Email, Email = model.Email}; 

      user.UserPhoto=model.UserPhoto; 
      var result = await UserManager.CreateAsync(user, model.Password); 
      if (result.Succeeded) 
      { 
       await SignInManager.SignInAsync(user, isPersistent: false, rememberBrowser: false); 
       return RedirectToAction("Index", "Home"); 
      } 
      AddErrors(result); 
     } 

     // If we got this far, something failed, redisplay form 
     return View(model); 
    } 

enter image description here

enter image description here

HttpPostedFileBase picは値ではなく、モデルがnullである必要があります。

どうすればこの問題を解決できますか?

答えて

1

UserPhotoを除いて、modelは、ほとんどのプロパティと同様に、明らかに値を持っているため、最初はmodel.UserPhotoがnullであると思われます。

あなたのフォームにUserPhotoという名前のものを投稿していますか?そうでない場合は、もちろんnullです。投稿後に設定されるのは、実際に投稿されたプロパティだけです。それ以外のものは、ヌルでも型のデフォルト値(ヌル値ではない場合)(つまり0int)です。

ただし、必要はありません。まず、これは「作成」ビューのように見えるので、UserPhotoには値がありません。 picが設定されている場合は、UserPhotoをそれに設定します。それ以外の場合は、何もアップロードされず、UserPhotoはnullになります。ただし、これが「編集」ビューであった場合は、データベースの最初のコピー(現在のUserPhotoを含む)をコピーするだけです。 picが掲示された場合にのみ、それを変更します。必要に応じて、あなたがUserPhotoセットを持っているので、

エラー

EDITです。その検証を削除するだけです。または、単にpicを取り除き、UserPhotoに直接投稿することもできます。

+0

の形式名はpicですが、un controller nameはuserphotoです。ありがとうございます。 – Kianoush

+0

いいえコントローラでは、その名前は 'pic'です。それにもかかわらず、フォームとアクションのパラメータ/モデルのプロパティ名が一致しなければなりません。値を 'UserPhoto'に入れるには、フォームの入力内容に' UserPhoto'という名前を付ける必要があります。 –

関連する問題