呼籲從我的觀點
一個異步方法,不要從視圖內調用的方法。該視圖實際上應該只是綁定到模型上的數據。如果要執行異步操作來獲取模型的數據,請在填充模型時在控制器中執行該操作。
作爲一個人爲的例子:
public class MyViewModel
{
public string SomeValue { get; set; }
}
和在控制器:
var model = new MyViewModel
{
SomeValue = await GetTheValue();
};
return View(model);
並在視圖:
@Model.SomeValue
該模型應該基本上是 「完全的」 時,它的給予渲染的視圖,視圖應該只是渲染它。異步操作應該在控制器中。
至於把太多的代碼在控制器和保持它在模型的選擇,你可以在模型上移動一個異步操作以某種初始化:
public class MyViewModel
{
public string SomeValue { get; private set; }
public async Task Initialize()
{
SomeValue = await GetTheValue();
}
}
在隨後的控制你調用一個:
var model = new MyViewModel();
await model.Initialize();
return View(model);
或許異步廠型號:
public class MyViewModel
{
public string SomeValue { get; private set; }
private MyViewModel() { }
public static async MyViewModel Create()
{
return new MyViewModel
{
SomeValue = await GetTheValue()
};
}
}
然後在控制器:
var model = await MyViewModel.Create();
return View(model);
有多種方法去了解這一點,真的。最主要的是讓異步操作保持在視圖之外,其唯一的工作應該是在模型完成後呈現UI。
'async/await'是一個核心功能,不綁定到MVC。此外,'async'不會使方法異步,它允許您在已經異步的方法上「等待」。只需將正確的關鍵字添加到您的方法中,就如同使用MVC – 2014-10-09 16:34:39
我的方法中包含所有正確的關鍵字。我只需要知道如何從我的意見中正確地打電話給他們? – 2014-10-09 16:38:17
[使用等待在剃刀視圖]可能的重複(http://stackoverflow.com/questions/19182349/use-of-await-in-razor-views) – 2014-10-10 07:13:17