mvc 4アプリにコントローラーアクションがあります:
public ActionResult Index()
{
GetStartedModel gsModel = new GetStartedModel();
return View(gsModel);
}
およびViewModel:
public class GetStartedModel
{
public IEnumerable<SelectListItem> listA { get; set; }
public IEnumerable<SelectListItem> listB { get; set; }
public GetStartedModel()
{
TestDataWebServiceHelper service = new TestDataWebServiceHelper();
this.GetData(service);
}
private async void SetData(TestDataWebServiceHelper service)
{
listA = await this.SetListA(service);
listB = await this.SetListB(service);
}
private async Task<IEnumerable<SelectListItem>> SetListA(TestDataWebServiceHelper service)
{
List<String> rawList = new List<String>();
rawList = await service.GetValuesAsync("json");
return rawList.Select(x => new SelectListItem { Text = x, Value = x });
}
private async Task<IEnumerable<SelectListItem>> SetListB(TestDataWebServiceHelper service)
{
List<String> rawList = new List<String>();
rawList = await service.GetValuesAsync("json");
return rawList.Select(x => new SelectListItem { Text = x, Value = x });
}
}
このコントローラーアクションを呼び出すと、次のエラーが発生します。
現在、非同期操作を開始することはできません。非同期操作は、非同期ハンドラーまたはモジュール内で、またはページライフサイクルの特定のイベント中にのみ開始できます。ページの実行中にこの例外が発生した場合は、ページが<%@ Page Async = "true"%>とマークされていることを確認してください。
だから、質問:
- このモデルの初期化を可能にするために、どういうわけかコントローラー、アクション、またはページ自体を非同期としてマークする必要がありますか?
- すべての初期化ロジックをviewmodelにカプセル化し、コントローラーにポップしないことは可能ですか?
- そのエラーの理由は何ですか?WebFormsに関連しているようですが、私はRazorエンジンを使用しています。