私の問題を説明するために、現在開発中のアプリケーション フォームのセクションの 1 つのバグに対処しようとしています。以下のスクリーンショットは、このセクションのワークフローを示しています。
この画面が表示されたセクションに最初に移動すると、ドロップダウンリストからオプションを選択し、[次へ] をクリックします。
[次へ] をクリックすると、選択したオプションのフォーム値が次のように生成されます。
オプションを変更すると問題が発生します。新しいオプション フォームの値が生成されると、前のオプションのエラーが次のように生成されます。
次または変更ボタンがクリックされたときのロジックの一部を説明するために、actionresult の対応する applycontroller の actionresult にポストバックします。オプション値を Web API にポストし、データをデータベースに保存します。以下のコードがこのタスクを実行しています。 :
[HttpPost]
[ValidateAntiForgeryToken]
public async Task<ActionResult> AdmissionsTest(AdmissionsTestViewModel model, ApplyService service, string programmeDesc, int? programmeId, FormCollection formCollection)
{
Guid applicationId = (Guid)TempData["ApplicationId"];
TempData["ApplicationId"] = applicationId;
model.ApplicationValidations = (ICollection<ApplicationValidation>)TempData["ApplicationValidations"];
TempData["ApplicationValidations"] = model.ApplicationValidations;
model.ApplicationProgrammeDetails = DependencyResolver.Current.GetService<ApplicationProgrammeDetailsViewModel>();
if (programmeId != null)
{
Programme programme = service.GetProgramme(model.ProgrammeId);
model.ApplicationProgrammeDetails.ProgrammeDesc = programme.ProgrammeDesc;
}
else
{
model.ApplicationProgrammeDetails.ProgrammeDesc = programmeDesc;
}
foreach (var item in formCollection.AllKeys)
{
if ((model.AdmissionsTestOptionId == null) && (item.ToLowerInvariant().StartsWith("submitbuttonnext") || (item.ToLowerInvariant().StartsWith("submitbuttonchange"))))
{
model.ApplicationId = applicationId;
model.NavButton = "10";
await _client.PostAsJsonAsync("api/ApplicationAdmissionsTestDetail/UpdateApplicationAdmissionsTestDetail", model)
.ContinueWith((postTask) => postTask.Result.EnsureSuccessStatusCode());
return View("AdmissionsTest", model);
}
if ((model.AdmissionsTestOptionId == 1) && (item.ToLowerInvariant().StartsWith("submitbuttonnext") || (item.ToLowerInvariant().StartsWith("submitbuttonchange"))))
{
model.ApplicationId = applicationId;
model.NavButton = "10";
await _client.PostAsJsonAsync("api/ApplicationAdmissionsTestDetail/UpdateApplicationAdmissionsTestDetail", model)
.ContinueWith((postTask) => postTask.Result.EnsureSuccessStatusCode());
return View("AdmissionsTest", model);
}
if ((model.AdmissionsTestOptionId == 2) && (item.ToLowerInvariant().StartsWith("submitbuttonnext") || (item.ToLowerInvariant().StartsWith("submitbuttonchange"))))
{
model.ApplicationId = applicationId;
model.NavButton = "10";
await _client.PostAsJsonAsync("api/ApplicationAdmissionsTestDetail/UpdateApplicationAdmissionsTestDetail", model)
.ContinueWith((postTask) => postTask.Result.EnsureSuccessStatusCode());
return View("AdmissionsTest", model);
}
if ((model.AdmissionsTestOptionId == 3) && (item.ToLowerInvariant().StartsWith("submitbuttonnext")))
{
model.ApplicationId = applicationId;
await _client.PostAsJsonAsync("api/ApplicationAdmissionsTestDetail/UpdateApplicationAdmissionsTestDetail", model)
.ContinueWith((postTask) => postTask.Result.EnsureSuccessStatusCode());
if (model.NavButton == null) { model.NavButton = "11"; }
return NavigateToStage(model.NavButton);
}
if ((model.AdmissionsTestOptionId == 3) && (item.ToLowerInvariant().StartsWith("submitbuttonchange")))
{
model.ApplicationId = applicationId;
model.NavButton = "10";
await _client.PostAsJsonAsync("api/ApplicationAdmissionsTestDetail/UpdateApplicationAdmissionsTestDetail", model)
.ContinueWith((postTask) => postTask.Result.EnsureSuccessStatusCode());
return View("AdmissionsTest", model);
}
}
//save
string dateGMATTaken = model.DateGMATTakenDay + "/" + model.DateGMATTakenMonth + "/" + model.DateGMATTakenYear;
string dateGRETaken = model.DateGRETakenDay + "/" + model.DateGRETakenMonth + "/" + model.DateGRETakenYear;
DateTime dateOfGMATTestTaken;
DateTime dateOfGRETestTaken;
if (DateTime.TryParse(dateGMATTaken, out dateOfGMATTestTaken))
{
model.GMATDateTaken = dateOfGMATTestTaken;
}
else
{
model.GMATDateTaken = null;
}
if (DateTime.TryParse(dateGRETaken, out dateOfGRETestTaken))
{
model.GREDateTaken = dateOfGRETestTaken;
}
else
{
model.GREDateTaken = null;
}
model.ApplicationId = applicationId;
await _client.PostAsJsonAsync("api/ApplicationAdmissionsTestDetail/UpdateApplicationAdmissionsTestDetail", model)
.ContinueWith((postTask) => postTask.Result.EnsureSuccessStatusCode());
//redirect based on submit
if (model.NavButton == null) { model.NavButton = "11"; }
return NavigateToStage(model.NavButton);
}
ブレークポイントを使用して actionresult をテストし、最終的な送信アクションに進む可能性があるかどうかを確認しましたが、これまでのところ actionresult 内にとどまっているようです。また、フィドラーを使用して、Web API の送信メソッドが呼び出されているかどうかを確認しました。空白も返します。
なぜこれが起こっているのか、誰にも考えがありますか?
アドバイスをいただきありがとうございます。