ユーザーの入力に基づいて、コントローラーのアクションに到達する前に、エンティティのいくつかのプロパティを無効にします。大まかな例(実際のモデルははるかに複雑です)で、クライアントに毎月請求するか隔週請求するかを定義する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に設定するとします。次に、気が変わって請求タイプを2週間ごとに設定し、2つの2週間目のプロパティを設定して最後にフォームを送信します。必要なのは、未使用のプロパティ(この例ではDayOfMonth)をコントローラーのアクションに到達する前に無効にする方法です。
ユーザーが請求の種類を変更するとき、またはフォームのonSubmitイベントをインターセプトすることで、JavaScriptを介してこれを実行できることを私は知っています。または、アクション内でも、コンテキストに保存する前に、一度実行して忘れる方法が必要です。
これを行う最良の方法は、カスタムモデルバインダーを使用することだと思いますが、私はそれについての経験がありません。新しいオブジェクトを作成しようとしましたModelBindingContext
が、新しいオブジェクト内のフォームデータを取得して解析する方法がわからなかったため、明らかにいくつかの指示が必要です。