Blazor 5x - قسمت 15 - کار با فرمها - بخش 3 - ویرایش اطلاعات
نویسنده: وحید نصیری
تاریخ: ۱۳۹۹/۱۲/۲۱ ۱۲:۱۰
آدرس: www.dntips.ir
| مطالب | ۳۶۹۴ |
| نویسندگان | ۲۷۶ |
| گروههای مطالب | ۱۰۲۴ |
| نقشههای راه | ۱۱۹ |
| دورهها | ۱۴ |
| اشتراکها | ۱۷۹۱۴ |
@page "/hotel-room/create"
@page "/hotel-room/create"
@page "/hotel-room/edit/{Id:int}" @code
{
// ...
[Parameter] public int? Id { get; set; }
protected override async Task OnInitializedAsync()
{
if (Id.HasValue)
{
// Update Mode
Title = "Update";
HotelRoomModel = await HotelRoomService.GetHotelRoomAsync(Id.Value);
}
else
{
// Create Mode
HotelRoomModel = new HotelRoomDTO();
}
}
// ...
} <EditForm Model="HotelRoomModel" OnValidSubmit="HandleHotelRoomUpsert">
<tr>
<td>@room.Name</td>
<td>@room.Occupancy</td>
<td>@room.RegularRate.ToString("c")</td>
<td>@room.SqFt</td>
<td>
<NavLink href="@($"hotel-room/edit/{room.Id}")" class="btn btn-primary">Edit</NavLink>
</td>
</tr>
namespace BlazorServer.Services
{
public interface IHotelRoomService
{
Task<bool> IsRoomUniqueAsync(string name, int roomId);
// ...
}
}
namespace BlazorServer.Services
{
public class HotelRoomService : IHotelRoomService
{
// ...
public Task<bool> IsRoomUniqueAsync(string name, int roomId)
{
if (roomId == 0)
{
// Create Mode
return _dbContext.HotelRooms
.ProjectTo<HotelRoomDTO>(_mapperConfiguration)
.AnyAsync(x => x.Name != name);
}
else
{
// Edit Mode
return _dbContext.HotelRooms
.ProjectTo<HotelRoomDTO>(_mapperConfiguration)
.AnyAsync(x => x.Name != name && x.Id != roomId);
}
}
}
} // ...
@inject IJSRuntime JsRuntime
@code
{
// ...
private async Task HandleHotelRoomUpsert()
{
var isRoomUnique = await HotelRoomService.IsRoomUniqueAsync(HotelRoomModel.Name, HotelRoomModel.Id);
if (!isRoomUnique)
{
await JsRuntime.ToastrError($"The room name: `{HotelRoomModel.Name}` already exists.");
return;
}
if (HotelRoomModel.Id != 0 && Title == "Update")
{
// Update Mode
var updateResult = await HotelRoomService.UpdateHotelRoomAsync(HotelRoomModel.Id, HotelRoomModel);
await JsRuntime.ToastrSuccess($"The `{HotelRoomModel.Name}` updated successfully.");
}
else
{
// Create Mode
var createResult = await HotelRoomService.CreateHotelRoomAsync(HotelRoomModel);
await JsRuntime.ToastrSuccess($"The `{HotelRoomModel.Name}` created successfully.");
}
NavigationManager.NavigateTo("hotel-room");
}
}
public Task<bool> IsRoomUniqueAsync (string name, int roomId) {
if (roomId == 0) {
// Create Mode
return _dbContext.HotelRooms
.ProjectTo<HotelRoomDTO> (_mapperConfiguration)
.AllAsync (x => x.Name != name);
} else {
// Edit Mode
var temp = _dbContext.HotelRooms
.ProjectTo<HotelRoomDTO> (_mapperConfiguration)
.AnyAsync (x => (x.Name == name && x.Id == roomId));
if (temp.Result == false) {
return _dbContext.HotelRooms
.ProjectTo<HotelRoomDTO> (_mapperConfiguration)
.AllAsync (x => x.Name != name);
} else return temp;
}
} public async Task<bool> IsRoomUniqueAsync(string name, int roomId)
{
if (roomId == 0)
{
// Create Mode
return !await _dbContext.HotelRooms.AnyAsync(x => x.Name == name);
}
else
{
// Edit Mode
return !await _dbContext.HotelRooms.AnyAsync(x => x.Name == name && x.Id != roomId);
}
}