模型绑定Null异常在Razor页面中为View组件

时间:2019-01-10 10:50:21

标签: c# asp.net-core razor-pages asp.net-core-viewcomponent

我使用Asp.net core 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用户上选择一个图像,并通过提交razorpage的OnPost方法,触发了Onpost方法,但是在Onpost中无法访问postfile:

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

此错误:System.NullReferenceException

1 个答案:

答案 0 :(得分:0)

这是我制作的演示代码的一部分,请检查差异

CreateUserViewModel.cs

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

请注意,CreateUserViewModel.cs中AvatarFile的类型必须与UploadFileViewComponent的InvokeAsync方法中的对象参数的类型一致。

UploadFileViewComponent.cs的Default.cshtml

@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方法中获得的值相同。