根据用户输入,我想在实体到达控制器的操作之前取消实体的某些属性。在一个粗略的例子中(实际模型要复杂得多),假设我的实体有一个 BillingType 属性,它定义了客户是按月还是每两周计费:
public class BillingMethod
{
public int Id { get; set; }
public int BillingTypeValue { get; set; }
public BillingType BillingType
{
get
{
return (BillingType)BillingTypeValue;
}
set
{
BillingTypeValue = (int)value;
}
}
public int? DayOfMonth { get; set; }
public int? DayOfFirstFortnight { get; set; }
public int? DayOfSecondFortnight { get; set; }
}
public enum BillingType
{
Monthly,
Fortnightly
}
现在假设用户选择按月收费,然后将 DayOfMonth 属性设置为 15。然后他改变主意,将 Billing Type 设置为每两周一次,并设置两个两周一次的属性,最后提交表单。我需要的是一种在未使用的属性(在此示例中为 DayOfMonth)到达控制器的操作之前将其无效的方法。
我知道当用户从一种计费类型更改为另一种计费类型时,或者通过拦截表单的 onSubmit 事件时,我可以通过 javascript 执行此操作。甚至在动作内部,在将其保存到上下文之前,但我需要一种方法来执行一次并忘记它。
我认为最好的方法是使用自定义模型绑定器,但我没有任何经验。我尝试创建一个新ModelBindingContext
对象,但我不知道如何在新对象中获取和解析表单数据,所以我显然需要一些指导。