【发布时间】:2022-01-16 18:33:15
【问题描述】:
我有一个异步方法,我需要在其中获取多个 ViewBag 数据。
问题是当我调试代码时它工作正常,并且不调试它不会加载最后一个视图包。
这里是示例代码
方法一:
public async Task LoadDDL()
{
var baseCurrencyTask = GetBaseCurrencyAsync();
var remittanceCurrencyTask = GetRemittanceCurrencyAsync();
var branchRemiCountryTask = GetBranchRemCountryAsync();
await Task.WhenAll(baseCurrencyTask, remittanceCurrencyTask, branchRemiCountryTask);
ViewBag.BaseCurrency = baseCurrencyTask.Result.ToSelectList("Id", "Name", BaseCurrencyId);
ViewBag.RemittanceCurrency = remittanceCurrencyTask.Result.ToSelectList("Id", "Name");
ViewBag.BranchRemittanceCountry = branchRemiCountryTask.Result.ToSelectList("Id", "Name");
}
private async Task<List<Lookup>> GetBaseCurrencyAsync()
{
return (await _lookupService.GetAllAsync(new LookupRequest() { Type = LookupType.BaseCurrency, ParentId = CountryId.ToString() })).ToList();
}
private async Task<List<Lookup>> GetRemittanceCurrencyAsync()
{
return (await _lookupService.GetAllAsync(new LookupRequest() { Type = LookupType.TransactionCurrency, ParentId = CountryId.ToString() })).ToList();
}
private async Task<List<Lookup>> GetBranchRemCountryAsync()
{
return (await _lookupService.GetAllAsync(new LookupRequest() { Type = LookupType.Country, ParentId = "" })).ToList();
}
方法二:
public async Task LoadDDL()
{
var baseCurrencyTask = GetBaseCurrencyAsync();
var remittanceCurrencyTask = GetRemittanceCurrencyAsync();
var branchRemiCountryTask = GetBranchRemCountryAsync();
await Task.WhenAll(baseCurrencyTask, remittanceCurrencyTask, branchRemiCountryTask);
ViewBag.BaseCurrency = (await baseCurrencyTask).ToSelectList("Id", "Name", BaseCurrencyId);
ViewBag.RemittanceCurrency = (await remittanceCurrencyTask).ToSelectList("Id", "Name");
ViewBag.BranchRemittanceCountry = (await branchRemiCountryTask).ToSelectList("Id", "Name");
}
对于.ToSelectList扩展方法
public static class ListExtensions
{
public static List<SelectListItem> ToSelectList<T>(this List<T> list, string idPropertyName, string namePropertyName = "Name", object defaultValue = null)
where T : class, new()
{
var selectListItems = new List<SelectListItem>();
if (list is null)
{
return selectListItems;
}
list.ForEach(item => selectListItems.Add(new SelectListItem
{
Text = item.GetType().GetProperty(namePropertyName).GetValue(item).ToString(),
Value = item.GetType().GetProperty(idPropertyName).GetValue(item).ToString(),
Selected = defaultValue != null && item.GetType().GetProperty(idPropertyName).GetValue(item).ToString() == defaultValue.ToString()
}));
return selectListItems;
}
}
有人可以帮忙吗?是我遗漏了什么还是什么?
【问题讨论】:
-
你为什么在异步方法中使用
.Result? -
@Llama 因为他批量等待,结果已经有了
-
.ToSelectList(返回什么? -
它不加载最后一个视图包 - 你的意思是什么?你怎么知道它没有加载?
-
@JeroenvanLangen 啊,我的眼睛设法以某种方式掩盖了那条线。我的错。
标签: c# asp.net-core