Привязка модели, исключение Null a View Component in Razor Pages

Я использую ядро ​​Asp.net 2.1 и создаю компонент представления:

public class UploadFileViewComponent:ViewComponent
{
    public async Task<IViewComponentResult> InvokeAsync(IFormFile formFile)
    {

        return await Task.FromResult((IViewComponentResult) View("Default", formFile));
    }
}

и попробуйте использовать это в razorpage:

@page
@using Mi24.Core.ViewMolde
@model Mi24.Web.Pages.Admin.Users.CreateUserModel
@{
   ViewData["Title"] = "Title"
}

    @await Component.InvokeAsync("UploadFile",new{ formFile=Model.CreateUserViewModel.AvatarFile });

но получаю ошибку: NullReferenceException: ссылка на объект не установлена ​​на экземпляр объекта.

добавив этот код в RazorPage выше, ошибка решена:

[BindProperty]
    public CreateUserViewModel CreateUserViewModel { get; set; }

    public async Task OnGetAsync()
    {
        CreateUserViewModel=new CreateUserViewModel();
    }

на viewcomponent пользователь выбирает изображения и с помощью формы отправки запускается метод OnPost для razorpage, но кошачий доступ к опубликованному файлу в Onpost:

public async void OnPostAsync()
    {
      string fileName=  CreateUserViewModel.AvatarFile.FileName;
    }

эта ошибка: System.NullReferenceException


person hojjat.mi    schedule 10.01.2019    source источник


Ответы (1)


Вот часть кода в демонстрации, которую я сделал, проверьте разницу

CreateUserViewModel.cs

 public class CreateUserViewModel
{
    public Microsoft.AspNetCore.Http.IFormFile AvatarFile { get; set; }
}

Обратите внимание, что тип AvatarFile в CreateUserViewModel.cs должен соответствовать типу аргументов объекта в методе InvokeAsync для UploadFileViewComponent.

Default.cshtml файла UploadFileViewComponent.cs

@model RazorPage2_1Project.Models.CreateUserViewModel

<h2> Upload File</h2>

<form method="post" enctype="multipart/form-data" >
<div class="form-group">
    <div class="col-md-10">
        <input type="file" name="AvatarFile" asp-for="AvatarFile"/>
    </div>
</div>
<div class="form-group">
    <div class="col-md-10">
        <input type="submit" value="Upload" />
    </div>
</div>
</form>

Примечание: значение asp-for и атрибута name ввода должно совпадать с тем, что вы хотите получить в методе публикации.

person Xueli Chen    schedule 11.01.2019