Исключение нулевой привязки модели - компонент просмотра на бритвенных страницах - PullRequest
0 голосов
/ 10 января 2019

Я использую Asp.net core 2.1 и создаю View Component:

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();
    }

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

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

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

1 Ответ

0 голосов
/ 11 января 2019

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

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 ввода должны совпадать с тем, что вы хотите получить в методе post.

...