2016-11-30 10 views
0

次の例では(taken from MSDN)、のビューモデルをTask<List<TodoItem>>という関数から戻しています。このような関数(例えば、NOTのアクションメソッド)からViewModel、たとえば、myViewModelを返すとどうなりますか?どうすればいい?アクションメソッド以外のサポート関数からViewModelを返す方法

public class PriorityListViewComponent : ViewComponent 
{ 
     private readonly ToDoContext db; 

     public PriorityListViewComponent(ToDoContext context) 
     { 
      db = context; 
     } 

     public async Task<IViewComponentResult> InvokeAsync(
     int maxPriority, bool isDone) 
     { 
      var items = await GetItemsAsync(maxPriority, isDone); 
      return View(items); 
     } 
     private Task<List<TodoItem>> GetItemsAsync(int maxPriority, bool isDone) 
     { 
      return db.ToDo.Where(x => x.IsDone == isDone && 
           x.Priority <= maxPriority).ToListAsync(); 
     }  
} 

UPDATE

動作しません後。

public class TestVCViewComponent : ViewComponent 
{ 
     public async Task<CustomViewModel> GetCustomViewModel(int ProjID) 
     { 
      CustomViewModel myViewModel = await GetFromDb(); 
      return myViwModel; 
     } 

//then call it: 

     public async Task<IViewComponentResult> InvokeAsync(int ProjID) 
     { 

      return View(GetCustomViewModel(ProjID)); 
     } 
} 

ビュー

@model myWebApp.Models.CustomViewModel 
...Some html here.... 
@await Component.InvokeAsync("TestVC", new { ProjID = Model.ProjectId }); 
--some other html here... 

エラー

と、InvalidOperationException:ViewDataDictionaryに渡されたモデルアイテムのタイプが「System.Threading.Tasksで以下のエラーを参照してください。 .Task`1 [myWebApp.Models.CustomViewModel] 'が、このViewDataDictionaryインスタンスには' myWebApp.Models.CustomViewModel 'タイプのモデル項目が必要です。

私のコメント

しかし、あなたはこのMSDN articleを見れば、私は記事が使用されていることをTask<CustomViewModel>...代わりのTask<List<TodoItem>>を使用していますことを除いて、ほぼ同じことをやっています。

public async Task<CustomViewModel> GetCustomViewModel() 
{ 
    CustomViewModel myViewModel = await GetFromDb(); 
    return myViwModel; 
} 

それを呼び出す:あなたのUPDATEコードで

var customViewModel = await GetCustomViewModel(); 
+0

メソッドから値を返す方法を尋ねていますか? –

+0

@EdPlunkettいいえ。私は、Dbからデータを取り込んだ後、myViewModelを返す必要があります。私は人口を埋めることができます。関数がアクションメソッドではない場合に、関数のシグネチャについて混乱します。 – nam

+0

私はお詫びします、私は質問を誤解しました。 –

答えて

0

return View(GetCustomViewModel(ProjID)); 

return View(await GetCustomViewModel(ProjID)); 
+0

あなたの提案は近いかもしれません。しかし、私はまだエラーが発生しています。上記の投稿に私が何をしているのかを説明するためにUPDATEセクションを追加しました。 – nam

+0

私はあなたがそれについてのpluralsightのチュートリアルを見ただけです(どこにいなくても)待っている必要があると思います。 – Alexan

+0

https://www.pluralsight.com/courses/aspdotnet-core-fundamentals#invite-modal – Alexan

2

をあなたは

置き換えを呼び出すGetCustomViewModel待たなければならないカスタムタイプを返すために、非同期メソッドを記述します方法ですが

関連する問題