ASP.NET Core Razor Pages でファイルを送信する手順です。
IFormFile 型のプロパティを用意する。
PageModel 側に Avatar という IFormFile 型のプロパティを用意します。
public class InputModel { [Display(Name = "User ID")] public string UserId { get; set; } [Phone] [Display(Name = "Phone number")] public string PhoneNumber { get; set; } [Display(Name = "Avatar")] [BindProperty] public IFormFile Avatar { get; set; } } private async Task LoadAsync(IdentityUser user) { var userName = await _userManager.GetUserNameAsync(user); var phoneNumber = await _userManager.GetPhoneNumberAsync(user); IFormFile avatar = null; Input = new InputModel { UserId = userName, PhoneNumber = phoneNumber, Avatar = avatar }; }
Razor Page 側の設定
Razor Page 側に IFormFile 型プロパティ(Avatar) をバインドします。また、form タグには、enctype="multipart/form-data" を指定します。この指定がないと、PageModel にポストした際に、Avatar プロパティへのモデルバインドが行われません。
<form id="profile-form" method="post" enctype="multipart/form-data"> <div asp-validation-summary="All" class="text-danger"></div> <div class="form-group"> <label asp-for="Input.UserId"></label> <input asp-for="Input.UserId" class="form-control" /> </div> <div class="form-group"> <label asp-for="Input.PhoneNumber"></label> <input asp-for="Input.PhoneNumber" class="form-control" /> <span asp-validation-for="Input.PhoneNumber" class="text-danger"></span> </div> <div class="form-group"> <label asp-for="Input.Avatar"></label> <input asp-for="Input.Avatar" class="form-control" /> <span asp-validation-for="Input.Avatar" class="text-danger"></span> </div> <button id="update-profile-button" type="submit" class="btn btn-primary">Save</button> </form>
これで、フォームをポストした際に Avatar プロパティを取得することができるようになります。