Blazor 5x - قسمت 28 - برنامهی Blazor WASM - نمایش لیست اطلاعات دریافتی از Web API
نویسنده: وحید نصیری
تاریخ: ۱۴۰۰/۰۱/۰۵ ۱۹:۰
آدرس: www.dntips.ir
| مطالب | ۳۶۹۴ |
| نویسندگان | ۲۷۶ |
| گروههای مطالب | ۱۰۲۴ |
| نقشههای راه | ۱۱۹ |
| دورهها | ۱۴ |
| اشتراکها | ۱۷۹۱۴ |
@page "/hotel/rooms"
@if (Rooms is not null && Rooms.Any())
{
}
else
{
<div style="position:fixed;top:50%;left:50%;margin-top:-50px;margin-left:-100px;">
<img src="images/loader.gif" />
</div>
}
@code {
IEnumerable<HotelRoomDTO> Rooms = new List<HotelRoomDTO>();
// ...
} <body>
<div id="app">
<div
style="
position: fixed;
top: 50%;
left: 50%;
margin-top: -50px;
margin-left: -100px;
"
>
<img src="images/ajax-loader.gif" />
</div>
</div> namespace BlazorServer.Models
{
public class HotelRoomDTO
{
// ...
public int TotalDays { get; set; }
public decimal TotalAmount { get; set; }
}
} @code
{
HomeVM HomeModel = new HomeVM();
// ...
private async Task LoadRoomsAsync()
{
Rooms = await HotelRoomService.GetHotelRoomsAsync(HomeModel.StartDate, HomeModel.EndDate);
foreach (var room in Rooms)
{
room.TotalAmount = room.RegularRate * HomeModel.NoOfNights;
room.TotalDays = HomeModel.NoOfNights;
}
}
}
@if (Rooms is not null && Rooms.Any())
{
<EditForm Model="HomeModel" OnValidSubmit="SaveBookingInfo" class="bg-light">
<div class="pt-3 pb-2 px-5 mx-1 mx-md-0 bg-secondary">
<DataAnnotationsValidator />
<div class="row px-3 mx-3">
<div class="col-6 col-md-4">
<div class="form-group">
<label class="text-warning">Check in Date</label>
<InputDate @bind-Value="HomeModel.StartDate" class="form-control" />
</div>
</div>
<div class="col-6 col-md-4">
<div class="form-group">
<label class="text-warning">Check Out Date</label>
<input @bind="HomeModel.EndDate" disabled="disabled"
readonly="readonly" type="date" class="form-control" />
</div>
</div>
<div class=" col-4 col-md-2">
<div class="form-group">
<label class="text-warning">No. of nights</label>
<select class="form-control" @bind="HomeModel.NoOfNights">
<option value="Select" selected disabled="disabled">(Select No. Of Nights)</option>
@for (var i = 1; i <= 10; i++)
{
<option value="@i">@i</option>
}
</select>
</div>
</div>
<div class="col-8 col-md-2">
<div class="form-group" style="margin-top: 1.9rem !important;">
@if (IsProcessing)
{
<button class="btn btn-success btn-block form-control">
<i class="fa fa-spin fa-spinner"></i>Processing...
</button>
}
else
{
<input type="submit" value="Update" class="btn btn-success btn-block form-control" />
}
</div>
</div>
</div>
</div>
</EditForm> @code {
bool IsProcessing;
// ...
private async Task SaveBookingInfo()
{
IsProcessing = true;
HomeModel.EndDate = HomeModel.StartDate.AddDays(HomeModel.NoOfNights);
await LocalStorage.SetItemAsync(ConstantKeys.LocalInitialBooking, HomeModel);
await LoadRoomsAsync();
IsProcessing = false;
}
}
@foreach (var room in Rooms)
{
<div class="row p-2 my-3 " style="border-radius:20px; border: 1px solid gray">
<div class="col-12 col-lg-3 col-md-4">
<div id="carouselExampleIndicators_@room.Id"
class="carousel slide mb-4 m-md-3 m-0 pt-3 pt-md-0"
data-ride="carousel">
<ol class="carousel-indicators">
@{
int imageIndex = 0;
int innerImageIndex = 0;
}
@foreach (var image in room.HotelRoomImages)
{
if (imageIndex == 0)
{
<li data-target="#carouselExampleIndicators_@room.Id"
data-slide-to="@imageIndex" class="active"></li>
}
else
{
<li data-target="#carouselExampleIndicators_@room.Id"
data-slide-to="@imageIndex"></li>
}
imageIndex++;
}
</ol>
<div class="carousel-inner">
@foreach (var image in room.HotelRoomImages)
{
var imageUrl = $"{ImagesBaseAddress}/{image.RoomImageUrl}";
if (innerImageIndex == 0)
{
<div class="carousel-item active">
<img class="d-block w-100" style="border-radius:20px;"
src="@imageUrl" alt="First slide">
</div>
}
else
{
<div class="carousel-item">
<img class="d-block w-100" style="border-radius:20px;"
src="@imageUrl" alt="First slide">
</div>
}
innerImageIndex++;
}
</div>
<a class="carousel-control-prev" href="#carouselExampleIndicators_@room.Id"
role="button" data-slide="prev">
<span class="carousel-control-prev-icon" aria-hidden="true"></span>
<span class="sr-only">Previous</span>
</a>
<a class="carousel-control-next" href="#carouselExampleIndicators_@room.Id"
role="button" data-slide="next">
<span class="carousel-control-next-icon" aria-hidden="true"></span>
<span class="sr-only">Next</span>
</a>
</div>
</div>
} var imageUrl = $"{ImagesBaseAddress}/{image.RoomImageUrl}"; @code {
string ImagesBaseAddress = "https://localhost:5006"; @foreach (var room in Rooms)
{
<div class="col-12 col-lg-9 col-md-8">
<div class="row pt-3">
<div class="col-12 col-lg-8">
<p class="card-title text-warning" style="font-size:xx-large">@room.Name</p>
<p class="card-text">
@((MarkupString)room.Details)
</p>
</div>
<div class="col-12 col-lg-4">
<div class="row pb-3 pt-2">
<div class="col-12 col-lg-11 offset-lg-1">
<a href="@($"hotel/room-details/{room.Id}")" class="btn btn-success btn-block">Book</a>
</div>
</div>
<div class="row ">
<div class="col-12 pb-5">
<span class="float-right">
<span class="float-right">Occupancy : @room.Occupancy adults </span><br />
<span class="float-right pt-1">Room Size : @room.SqFt sqft</span><br />
<h4 class="text-warning font-weight-bold pt-4">
<span style="border-bottom:1px solid #ff6a00">
@room.TotalAmount.ToString("#,#.00;(#,#.00#)")
</span>
</h4>
<span class="float-right">Cost for @room.TotalDays nights</span>
</span>
</div>
</div>
</div>
</div>
</div>
</div>
}