2017-02-10 19 views
-2

私はそれを示してProductViewModelコンストラクタを呼び出しています上記のコードでは、MVC 4非同期MVCでのViewModelを呼び出すためにどのように4

public async Task<ActionResult> Index(bool MyList, int Verified, string searchText) 
     { 
ProductViewModel pvm =await new ProductViewModel(MyList, Verified, searchText); 
      return View(pvm); 
} 

で非同期アクションを作成しようとしています

を待つことができませんこの後ProductViewModel

私は私のコンストラクタ非同期を作ってみましたが、コンストラクタはエラーを示し、

次のように

この非同期メソッドは '待つ' 演算子

を欠い私は、事前に

public class ProductListViewModel 
    { 
     public MyEntities _context; 
     public bool _verified; 

     public async Task<ProductViewModel> ProductViewModel(bool MyList, int Verified, string searchText) 
     { 
      _context = new MyEntities(); 
      this.search = searchText; 
      this.SelectedListType = MyList; 
      this._verified= Verified; 

     } 

    public int SelectedListType { get; set; } 
     public IEnumerable<SelectListItem> VerifiedTypeList 
     { 
      get 
      { 
       List<ListTypeViewModel> ltvm = new List<ListTypeViewModel>(); 
       ltvm.Add(new ListTypeViewModel(1,"Verified")); 
       ltvm.Add(new ListTypeViewModel(0,"Pending")); 
       var allVerifiedType = ltvm.Select(c => new SelectListItem 
       { 
        Value = c.ListValue.ToString(), 
        Text = c.ListText 

       }); 
       return DefaultVerifiedTypeList.Concat(allVerifiedType); 
      } 
     } 
     public IEnumerable<SelectListItem> DefaultVerifiedTypeList 
     { 
      get 
      { 
       return Enumerable.Repeat(new SelectListItem 
       { 
        Value = "-1", 
        Text = "All" 
       }, count: 1); 
      } 
     } 
    public List<ProductViewmodel> ProductList 
     { 
      get 
      { 
       List<ProductViewmodel> pdvmList = new List<ProductViewmodel>(); 
       foreach (var pm in _context.GetProductList(SelectedListType, _verified, search).ToList()) 
       { 
        try 
        { 
         ProductViewmodel pdvm = new ProductViewmodel(); 
         pdvm.Price = pm.Price; 
         pdvm.ProductID = pm.ProductID; 
         pdvm.ProductName = System.Threading.Thread.CurrentThread.CurrentCulture.TextInfo.ToTitleCase(pm.ProductName.ToLower()); 
         pdvm.IsVerified = pm.Verified; 
         pdvmList.Add(pdvm); 
        } 
        catch (Exception error) 
        { 
         Console.WriteLine(error.Message); 
        } 
       } 
       return pdvmList; 
      } 
     } 
} 

感謝をProductViewModelを作成しました。

+0

1 - あなたは、そのアクションが非同期する必要があるのはなぜ?そのアクションでスレッドのブロック操作が実行されていますか? 2 - 個人的な意見かもしれませんが、そのビューモデルはあまりにも多くの責任を持っています。もし私が間違っていなければ、EFコンテキストとヒットデータベースも使用しています。 – Developer

+0

はい、あなたは正しいです、実際に私のアクションは、Webページを読み込むには時間がかかりすぎています。 –

+0

MVCかどうかは、コンストラクターを非同期にすることはできません。詳細は、重複したマークを参照してください。 –

答えて

-1

わからないコンストラクタは、非同期にすることができますが、非同期的にオブジェクトをインスタンス化することによって非同期的にそれらを呼び出すことができます。

ProductViewModel pvm = null; 
await Task.Run(async() => { 
           pvm = new ProductViewModel(MyList, Verified, searchText); 
          }); 
関連する問題