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将阻止它被模型绑定器设置。
我不知道我在说什么,但它似乎解决了这个问题