如何使用 razor 页面解除绑定属性
How to unbind properties by using razor pages
我使用剃刀页面。
我有这个属性
[BindProperty]
public ProductDto CreateProduct { get; set; }
在OnPost
方法中,我检查ModelState.IsValid
一切正常。
但是当我向 OnPost
方法旁边的处理程序发送请求时,验证将为假。
原因是 ModelState
检查我的处理程序输入以及使用绑定 属性 属性的 CreateProduct
,我如何在发送请求时取消绑定使用 BindProperty
属性的 属性给 hanlders.
public IActionResult OnPostAddBrand(AddBrandDto model)
{
if (!ModelState.IsValid)
{
// AddBrandDto is valid but I got here.
Return Json(false);
}
// todo: SaveBrand
Return Json(true);
}
我知道如果我不使用 BindProperty
属性并从方法输入中获取对象,问题将得到解决,如下所示:
public ProductDto CreateProduct { get; set; }
public async Task<IActionResult> OnPost(ProductDto createProduct)
{
}
但是有没有其他方法可以解决这个问题呢
您可以使用 ModelState.Remove 从 ModelStateDictionary
中删除属性,例如
ModelState.Remove("Password");
如果你想“解除绑定”一个复合体属性,你可以使用反射来移除它的属性:
foreach(var prop in ProductDto.GetType().GetProperties())
{
ModelState.Remove($"{nameof(ProductDto)}.{prop.Name}");
}
我使用剃刀页面。
我有这个属性
[BindProperty]
public ProductDto CreateProduct { get; set; }
在OnPost
方法中,我检查ModelState.IsValid
一切正常。
但是当我向 OnPost
方法旁边的处理程序发送请求时,验证将为假。
原因是 ModelState
检查我的处理程序输入以及使用绑定 属性 属性的 CreateProduct
,我如何在发送请求时取消绑定使用 BindProperty
属性的 属性给 hanlders.
public IActionResult OnPostAddBrand(AddBrandDto model)
{
if (!ModelState.IsValid)
{
// AddBrandDto is valid but I got here.
Return Json(false);
}
// todo: SaveBrand
Return Json(true);
}
我知道如果我不使用 BindProperty
属性并从方法输入中获取对象,问题将得到解决,如下所示:
public ProductDto CreateProduct { get; set; }
public async Task<IActionResult> OnPost(ProductDto createProduct)
{
}
但是有没有其他方法可以解决这个问题呢
您可以使用 ModelState.Remove 从 ModelStateDictionary
中删除属性,例如
ModelState.Remove("Password");
如果你想“解除绑定”一个复合体属性,你可以使用反射来移除它的属性:
foreach(var prop in ProductDto.GetType().GetProperties())
{
ModelState.Remove($"{nameof(ProductDto)}.{prop.Name}");
}