如何使用 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.RemoveModelStateDictionary 中删除属性,例如

ModelState.Remove("Password");

如果你想“解除绑定”一个复合体属性,你可以使用反射来移除它的属性:

foreach(var prop in ProductDto.GetType().GetProperties())
{
    ModelState.Remove($"{nameof(ProductDto)}.{prop.Name}");
}