有没有办法在ASP.Net MVC6中的模型中删除某些属性的模型验证。
我发现了这篇文章Is there a strongly-named way to remove ModelState errors in ASP.NET MVC
建议使用ModelBindingHelper.ClearValidationStateForModel(Type,ModelStateDictionary,IModelMetadataProvider,string)。
但我无法在此找到任何进一步的帮助。
有人可以建议使用ClearValidationStateForModel删除模型属性的工作示例吗?
答案 0 :(得分:3)
这应该会删除Title
视图模型的CreatePost
属性的验证错误。
[HttpPost]
public ActionResult Create(CreatePost model)
{
if (ModelState.IsValid)
{
//to do : Save and return something
}
ModelBindingHelper.ClearValidationStateForModel(model.GetType(),
ModelState,MetadataProvider,"Title");
return View(model);
}
此外,ModelState.ClearValidationState
也可以。
ModelState.ClearValidationState("Title");
编辑:根据评论,OP希望根据另一个属性值排除某个要验证的属性。这应该可以正常工作。
[HttpPost]
public ActionResult Create(CreatePost model) //CreatePost model
{
if (model.Type == 1)
{
ModelBindingHelper.ClearValidationStateForModel(model.GetType(),
ModelState, MetadataProvider, "Title");
}
if (ModelState.IsValid)
{
// to do : Do useful stuff and return something
}
return View(model);
}
答案 1 :(得分:1)
ModelBindingHelper
是ASP.NET Core 2.0 / MVC6 +
如果您需要使用以前版本的.NET / ASP.NET,您可以根据Is there a strongly-named way to remove ModelState errors上的Simon_Weaver答案执行以下操作:
这是我的解决方案 - 在
RemoveFor()
上的ModelState
扩展方法,以MVC HTML帮助程序为模型:public static void RemoveFor<TModel>(this ModelStateDictionary modelState, Expression<Func<TModel, object>> expression) { string expressionText = ExpressionHelper.GetExpressionText(expression); foreach (var ms in modelState.ToArray()) { if (ms.Key.StartsWith(expressionText + ".")) { modelState.Remove(ms); } } }
以下是它的使用方法:
if (model.CheckoutModel.ShipToBillingAddress == true) { // COPY BILLING ADDRESS --> SHIPPING ADDRESS ShoppingCart.ShippingAddress = ShoppingCart.BillingAddress; // REMOVE MODELSTATE ERRORS FOR SHIPPING ADDRESS ModelState.RemoveFor<SinglePageStoreModel>(x => x.CheckoutModel.ShippingAddress); } if (ModelState.IsValid) { // should get here now provided billing address is valid }
答案 2 :(得分:0)
我需要进行验证,以使VM中的单个字段具有例外
在控制器中,我正在做
if ("true" == Condition)
{
ModelState.Remove("KeyName");
}
如果“ KeyName”是ModelState中的唯一错误,则现在为true
if (ModelState.IsValid)
{
// ModelState.IsValid is true now
}