razor页面中的模型绑定不绑定对象

razor页面中的模型绑定不绑定对象,razor,model,binding,Razor,Model,Binding,我有一个小项目,我正试图添加到数据库中。我得到了一个空引用异常,但我认为问题在于模型绑定不能正常工作。 这是剃刀: <form method="post" class="col-sm-12" enctype="multipart/form-data"> <div asp-validation-summary="ModelOnly" class="text-danger"

我有一个小项目,我正试图添加到数据库中。我得到了一个空引用异常,但我认为问题在于模型绑定不能正常工作。 这是剃刀:

 <form  method="post" class="col-sm-12" enctype="multipart/form-data">
    <div asp-validation-summary="ModelOnly" class="text-danger"></div>
    <div class="form-group">
        <div class="col-sm-12">
            <label>Name</label>
            <span></span>
        </div>
        <div class="col-sm-12">
            <input class="col" asp-for="Product.Name" />
            <span asp-validation-for="Product.Name" class="text-danger"></span>
        </div>
        <div class="col-sm-12">
            <label>Description</label>
        </div>
        <div class="col-sm-12">
            <textarea cols="60" rows="5" asp-for="@Model.Product.Description"></textarea>
            <span asp-validation-for="Product.Description" class="text-danger"></span>
        </div>
        <div class="col-sm-12 ">
            <label>Image</label>
        </div>
        <div class="col-sm-12">
            <input type="file" asp-for="Image" />
            <span asp-validation-for="Image" class="text-danger"></span>
        </div>
        <div class="col-sm-12">
            <label>Categories</label>
        </div>
        <select name="categorycombo" asp-for="Product.CategoryId">
            <option value="">Choose Category</option>
            @foreach (var category in @Model.Categories)
            {
                <option value="@category.Id.ToString()">@category.Name.ToString()</option>
            }
        </select>
        <div class="col-sm-12 ">
            <input type="submit" value="Add" />
        </div>
    </div>
</form>

名称
描述
形象
类别
选择类别
@foreach(var category in@Model.Categories)
{
@category.Name.ToString()
}
以下是OnPost方法:

public async Task<IActionResult> OnPostAsync()
        {
            if (!ModelState.IsValid)
            {
                return await GetPage();
            }

            var path = Path.Combine(_webHostEnvironment.WebRootPath, "Images/Products");
            if (!Directory.Exists(path))
            {
                Directory.CreateDirectory(path);
            }

            if (Image.Length > 0)
            {
                var fileStream = new FileStream(Path.Combine(path, Image.FileName), FileMode.Create);
                ***Product.ImageUrl = Path.Combine("Images/Products", Image.FileName);***
                await Image.CopyToAsync(fileStream);
            }

            await _productRepo.Add(Product);

            return RedirectToPage("./AddProduct");
        }
公共异步任务OnPostAsync() { 如果(!ModelState.IsValid) { return wait GetPage(); } var path=path.Combine(_webHostEnvironment.WebRootPath,“图像/产品”); 如果(!Directory.Exists(path)) { CreateDirectory(路径); } 如果(Image.Length>0) { var fileStream=newfilestream(Path.Combine(Path,Image.FileName),FileMode.Create); ***Product.ImageUrl=Path.Combine(“图像/产品”,Image.FileName)*** 等待Image.CopyToAsync(文件流); } 等待产品报告添加(产品); 返回重定向Topage(“./AddProduct”); } 在创建ImageUrl的那一行,我得到了product的NullReference异常,如果绑定工作正常,它不应该为null。同时,也许有些东西我看不见

我忘了在这里添加进行模型绑定的代码,它是:

        [BindProperty]
        public IEnumerable<ProductViewModel> Products { get; private set; }
        [BindProperty]
        public IEnumerable<CategoryViewModel> Categories { get; private set; }
        [BindProperty]
        public ProductViewModel Product { get; private set; }
        [Required]
        [BindProperty]
        public IFormFile Image { get; set; }
[BindProperty]
公共IEnumerable乘积{get;private set;}
[BindProperty]
公共IEnumerable类别{get;private set;}
[BindProperty]
公共产品视图模型产品{get;private set;}
[必需]
[BindProperty]
公共文件映像{get;set;}
已解决: 怎样? 很简单,但我不明白为什么

[BindProperty]
        public ProductViewModel Product { get; private set; }
在前面的代码片段中,我们删除了私有集;并将其替换为set;它是有效的。 我不理解其中的原因,因为我对另一个类使用了相同的代码,而这两个类之间的唯一区别是另一个类的表单中没有和ifform文件。 在网上,我发现一些信息表明,进行模型绑定的代码不是页面模型的一部分,因此向属性setter添加private或internal将阻止它被模型绑定器设置。 我不知道我在说什么,但它似乎解决了这个问题