У меня есть требование вызвать асинхронный метод из представления, но я понятия не имею, как это сделать. мой взгляд выглядит следующим образом:async calls in mvc view
@using Skipstone.Web.Services;
@{
var service = new UserService(new CompanyService());
var users = await service.GetAll();
ViewBag.Title = "Manage Users";
}
@section Breadcrumb {
<ol class="breadcrumb">
<li><a href="/">Home</a></li>
<li><a href="/Manage/Users">Users</a></li>
</ol>
}
<div class="container">
<div class="row">
<div class="col-md-12">
<div class="message"></div>
<a href="/Manage/Users/Create">Create a new user</a>
<table class="table table-bordered users sortable">
<thead>
<tr>
<th data-defaultsort="desc">Username</th>
<th>Email</th>
<th>Status</th>
<th data-defaultsort="disabled">Member of</th>
<th data-defaultsort="disabled"></th>
</tr>
</thead>
<tbody>
@foreach (var user in users)
{
<tr id="@user.Id">
<td>@user.UserName</td>
<td>@user.Email</td>
<td>
@if (user.IsApproved)
{
<span class="label label-success label-approved">Approved</span>
}
else
{
<span class="label label-warning label-approved">Rejected</span>
}
@if (user.IsLockedOut)
{
<span class="label label-danger label-locked">Locked</span>
}
</td>
<td>
@foreach (var group in user.MemberOf)
{
<text>@group </text>
}
</td>
<td>
@if (user.IsApproved)
{
<a href="#" data-id="@user.Id" class="btn btn-default reject"><span class="glyphicon glyphicon-remove-sign"></span> @*<div class="visible-md visible-lg">Reject</div>*@</a>
}
else
{
<a href="#" data-id="@user.Id" class="btn btn-default approve"><span class="glyphicon glyphicon-ok-sign"></span> @*<div class="visible-md visible-lg">Approve</div>*@</a>
}
<a href="/Manage/Users/Edit/@user.Id" class="btn btn-default"><span class="glyphicon glyphicon-pencil"></span> @*<div class="visible-md visible-lg">Edit</div>*@</a>
<a href="#" data-id="@user.Id" class="btn btn-default delete"><span class="glyphicon glyphicon-remove"></span> @*<div class="visible-md visible-lg">Delete</div>*@</a>
</td>
</tr>
}
</tbody>
</table>
</div>
</div>
</div>
@section Scripts {
<link href="@Url.Content("~/Content/bootstrap-sortable.css")" rel="stylesheet" />
<script src="@Url.Content("~/Scripts/bootstrap-sortable.js")" type="text/javascript"></script>
<script src="@Url.Content("~/Scripts/jquery.skipstone-users-index.js")" type="text/javascript"></script>
}
, как вы можете видеть, что линия гласит:
вар пользователей = ждут service.GetAll();
- асинхронный метод, но вы не можете вызывать асинхронные методы, не помещая их в метод async, поэтому я имею порочный круг.
С кем-то сталкивались раньше? Есть ли что-то, что я могу сделать, чтобы оно работало.
NB: У меня нет доступа к контроллеру, так как это виртуальное представление и не имеет контроллер, он подается из базы данных
Cheers,
/r3plica
Я не совсем уверен, что вы подразумеваете под «виртуальным представлением без контроллера, базы данных "? –
Я имею в виду, что нет контроллера. Я использую пользовательский VirtualPathProvider и MvcRouteHandler для маршрутизации любого виртуального трафика. Затем это соответствует пути с хранилищем путей в моей базе данных, который затем обслуживает html для требуемого представления. Таким образом, из-за этого нет контроллера, просто просмотр, который подается динамически – r3plica
, аналогичный http://www.umbraworks.net/bl0g/rebuildall/2009/11/17/ASP_NET_MVC_and_virtual_views – r3plica