Я пытаюсь создать действие асинхронной в MVC 4.Как звонить ViewModel асинхронно в MVC 4
public async Task<ActionResult> Index(bool MyList, int Verified, string searchText)
{
ProductViewModel pvm =await new ProductViewModel(MyList, Verified, searchText);
return View(pvm);
}
В приведенном выше коде, где я звоню ProductViewModel конструктор он показывает
не может ждать ProductViewModel
После этого я попытался сделать мой конструктор асинхр но конструктор показывает ошибку,
Этот метод асинхронной не хватает 'ждать' оператора
Я создал 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;
}
}
}
Спасибо заранее.
1 - Почему вам нужно это действие, чтобы быть асинхронной? Есть ли какие-либо операции блокировки потоков в этом действии? 2- Может быть, личное мнение, но эта модель взгляда имеет слишком много обязанностей, и если я не ошибаюсь, она использует контекст EF и попадает в базу данных, - похоже, это довольно беспорядок. – Developer
да, вы правы, на самом деле мое действие занимает слишком много времени, чтобы загрузить веб-страницу. –
MVC или нет, вы не можете сделать конструкторы async. Подробнее см. В отмеченном дубликате. –