これは私の言いたいことを知っているあなたの山だと思います。それは機能しますが、ページのライフサイクル (ロードとポストバック) と、ここでの各 if ステートメントの冗長性についても、これをやり過ぎているように感じます。
何が起こるかは次のとおりです。
- このメソッドは、非常にページの読み込み時に呼び出されます (ポストバックなどに関係なく)
- ユーザーがフォームを送信すると、totalPoints が減ります (これらのラジオボタンの下に、送信してポイントを請求できるボタンがあります)。
そのため、ユーザーがポイントを要求 (送信) した直後にもこのメソッドを呼び出し、次回の合計ポイントからそれらのポイントを削除します。したがって、アカウントの合計ポイントに基づいて、最後の送信からページが更新された後、これらのラジオ ボタンを有効/無効にする必要があります。
private void SetPointsOptions()
{
int totalPoints = customer.TotalPoints;
rbn200Points.Text = "200 pts";
rbn250Points.Text = "250 pts";
rbn400Points.Text = "400 pts";
rbn500Points.Text = "500 pts";
rbn600Points.Text = "600 pts";
// clear state of radio buttons & disable submit
if (totalPoints < 200)
{
rbn200Points.Enabled = false;
rbn250Points.Enabled = false;
rbn400Points.Enabled = false;
rbn500Points.Enabled = false;
rbn600Points.Enabled = false;
rbn200Points.Checked = false;
rbn250Points.Checked = false;
rbn400Points.Checked = false;
rbn500Points.Checked = false;
rbn600Points.Checked = false;
btnClaimRewardPoints.Enabled = false;
return;
}
if(totalPoints >= 200 && totalPoints < 250)
{
rbn200Points.Enabled = true;
}
else if(totalPoints >= 250 && totalPoints < 400)
{
rbn200Points.Enabled = true;
rbn250Points.Enabled = true;
}
else if(totalPoints >= 400 && totalPoints < 500)
{
rbn200Points.Enabled = true;
rbn250Points.Enabled = true;
rbn400Points.Enabled = true;
}
else if(totalPoints >= 500 && totalPoints < 600)
{
rbn200Points.Enabled = true;
rbn250Points.Enabled = true;
rbn400Points.Enabled = true;
rbn500Points.Enabled = true;
}
else if(totalPoints >= 600)
{
rbn200Points.Enabled = true;
rbn250Points.Enabled = true;
rbn400Points.Enabled = true;
rbn500Points.Enabled = true;
rbn600Points.Enabled = true;
}
}