у меня есть представление
@using Microsoft.AspNetCore.Mvc.TagHelpers
@model BuildingFlow.Services.Models.ViewModels.ProjectStage.ProjectStageViewModel
@{
ViewData["Title"] = "Index";
ViewData["statusClass"] = "";
}
@section VendorStyles {
<link rel="stylesheet" href="~/vendor/libs/datatables-bs5/datatables.bootstrap5.css">
<link rel="stylesheet" href="~/vendor/libs/datatables-responsive-bs5/responsive.bootstrap5.css">
<link rel="stylesheet" href="~/vendor/libs/datatables-buttons-bs5/buttons.bootstrap5.css">
<link rel="stylesheet" href="~/vendor/libs/sweetalert2/sweetalert2.css" />
<link rel="stylesheet" href="~/vendor/libs/@form-validation/form-validation.css" />
}
@section VendorScripts {
<script src="~/vendor/libs/moment/moment.js"></script>
<script src="~/vendor/libs/datatables-bs5/datatables-bootstrap5.js"></script>
<script src="~/vendor/libs/sweetalert2/sweetalert2.js"></script>
<script src="~/vendor/libs/@form-validation/popular.js"></script>
<script src="~/vendor/libs/@form-validation/bootstrap5.js"></script>
<script src="~/vendor/libs/@form-validation/auto-focus.js"></script>
<script src="~/vendor/libs/cleavejs/cleave.js"></script>
<script src="~/vendor/libs/cleavejs/cleave-phone.js"></script>
}
@section PageScripts {
<script src="~/js/_buildingFlow-costitem-list.js"></script>
}
<div class="row g-6 mb-6">
<div class="col-sm-6 col-xl-3">
<div class="card">
<div class="card-body">
<div class="d-flex align-items-start justify-content-between">
<div class="content-left">
<div class="d-flex align-items-center my-1">
<h4 class="mb-0 me-2">155</h4>
<p class="text-primary mb-0"></p>
</div>
<small class="mb-0">Total Transactions</small>
</div>
<div class="avatar">
<span class="avatar-initial rounded bg-label-primary">
<i class="bx bx-transfer-alt bx-lg"></i>
</span>
</div>
</div>
</div>
</div>
</div>
<div class="col-sm-6 col-xl-3">
<div class="card">
<div class="card-body">
<div class="d-flex align-items-start justify-content-between">
<div class="content-left">
<div class="d-flex align-items-center my-1">
<h4 class="mb-0 me-2">$12555</h4>
<p class="text-success mb-0"></p>
</div>
<small class="mb-0">Total Paid</small>
</div>
<div class="avatar">
<span class="avatar-initial rounded bg-label-success">
<i class="bx bx-user-check bx-lg"></i>
</span>
</div>
</div>
</div>
</div>
</div>
<div class="col-sm-6 col-xl-3">
<div class="card">
<div class="card-body">
<div class="d-flex align-items-start justify-content-between">
<div class="content-left">
<div class="d-flex align-items-center my-1">
<h4 class="mb-0 me-2">$35544</h4>
<p class="text-danger mb-0"></p>
</div>
<small class="mb-0">Total Due</small>
</div>
<div class="avatar">
<span class="avatar-initial rounded bg-label-danger">
<i class="bx bx-group bx-lg"></i>
</span>
</div>
</div>
</div>
</div>
</div>
<div class="col-sm-6 col-xl-3">
<div class="card">
<div class="card-body">
<div class="d-flex align-items-start justify-content-between">
<div class="content-left">
<div class="d-flex align-items-center my-1">
<h4 class="mb-0 me-2">$55587</h4>
<p class="text-success mb-0"></p>
</div>
<small class="mb-0">Total Canceled</small>
</div>
<div class="avatar">
<span class="avatar-initial rounded bg-label-warning">
<i class="bx bx-user-voice bx-lg"></i>
</span>
</div>
</div>
</div>
</div>
</div>
</div>
@* CostItems Table *@
<div class="card">
<div class="card-datatable table-responsive pb-0">
<table id="costItemsTable" class="table mb-6">
<thead class="border-top">
<tr class="text-nowrap">
<th></th>
<th>@Html.DisplayNameFor(model => model.Id)</th>
<th>
@Html.DisplayNameFor(model => model.Customer)
</th>
<th>
@Html.DisplayNameFor(model => model.TransactionDate)
</th>
<th>
@Html.DisplayNameFor(model => model.DueDate)
</th>
<th>
@Html.DisplayNameFor(model => model.Total)
</th>
<th>
@Html.DisplayNameFor(model => model.Status)
</th>
<th>Actions</th>
</tr>
</thead>
<tbody>
@if (Model?.Any() == true)
{
@foreach (var item in Model)
{
string statusClass = "info"; // Default value if item.Status is null or doesn't match any case
if (!string.IsNullOrWhiteSpace(item.Status))
{
string lowerCaseStatus = item.Status.ToLower();
if (lowerCaseStatus == "paid")
{
statusClass = "success";
}
else if (lowerCaseStatus == "due")
{
statusClass = "warning";
}
else if (lowerCaseStatus == "canceled")
{
statusClass = "danger";
}
}
<tr>
<td></td>
<td>
@Html.DisplayFor(modelItem => item.Id)
</td>
<td class="text-nowrap fw-medium text-heading">
@Html.DisplayFor(modelItem => item.Customer)
</td>
<td>
@item.TransactionDate.ToString("dd.MM.yyyy")
</td>
<td>
@item.DueDate.ToString("dd.MM.yyyy")
</td>
<td>
[email protected]
</td>
<td>
<div class="badge bg-label-@statusClass rounded-pill">
@Html.DisplayFor(modelItem => item.Status)
</div>
</td>
<td class="text-nowrap">
<a asp-action="Update" asp-route-id="@item.Id" class="btn btn-sm btn-icon shadow-none"><i class='bx bx-edit'></i></a>
<a href="/Transactions/Delete/@item.Id" class="btn btn-sm btn-icon shadow-none delete-transaction" data-transaction-username="@Html.DisplayFor(modelItem => item.Customer)"><i class="bx bx-trash"></i></a>
</td>
</tr>
}
}
</tbody>
</table>
</div>
</div>
и есть модель
public class ProjectStageViewModel
{
public int Id { get; set; }
[Required(ErrorMessage = "Название этапа обязательно")]
[StringLength(200, ErrorMessage = "Название этапа не должно превышать 200 символов")]
[Display(Name = "Название этапа")]
public string StageTitle { get; set; }
[StringLength(1000, ErrorMessage = "Описание не должно превышать 1000 символов")]
[Display(Name = "Описание")]
public string Description { get; set; }
[Display(Name = "Дата начала")]
[DataType(DataType.Date)]
public DateTime StartDate { get; set; }
[Display(Name = "Дата окончания")]
[DataType(DataType.Date)]
public DateTime EndDate { get; set; }
[StringLength(50, ErrorMessage = "Статус не должен превышать 50 символов")]
[Display(Name = "Статус")]
public string Status { get; set; }
[Required]
public int ProjectId { get; set; }
public IEnumerable<CostItemViewModel> CostItemViewModel { get; set; } = null;
public SelectProjectViewModel SelectProjectViewModel { get; set; } = new SelectProjectViewModel();
//[Display(Name = "Проект")]
//[ValidateNever]
//public string ProjectName { get; set; } // Дополнительное свойство для отображения названия проекта
}
в представлении ошибки в стоках типа
<th>
@Html.DisplayNameFor(model => model.Customer)
</th>
Судя по вашему коду, вы пытаетесь отобразить заголовок столбца для свойства Customer
в таблице, но в модели ProjectStageViewModel
нет свойства Customer
. Это может быть причиной ошибки, которую вы видите.
Чтобы исправить это, вам нужно убедиться, что в вашей модели ProjectStageViewModel
есть свойство Customer
, если вы хотите его использовать в представлении. Если Customer
— это свойство, которое должно быть в модели, добавьте его в ProjectStageViewModel
. Например:
public class ProjectStageViewModel
{
public int Id { get; set; }
[Required(ErrorMessage = "Название этапа обязательно")]
[StringLength(200, ErrorMessage = "Название этапа не должно превышать 200 символов")]
[Display(Name = "Название этапа")]
public string StageTitle { get; set; }
[StringLength(1000, ErrorMessage = "Описание не должно превышать 1000 символов")]
[Display(Name = "Описание")]
public string Description { get; set; }
[Display(Name = "Дата начала")]
[DataType(DataType.Date)]
public DateTime StartDate { get; set; }
[Display(Name = "Дата окончания")]
[DataType(DataType.Date)]
public DateTime EndDate { get; set; }
[StringLength(50, ErrorMessage = "Статус не должен превышать 50 символов")]
[Display(Name = "Статус")]
public string Status { get; set; }
[Required]
public int ProjectId { get; set; }
// Добавьте свойство Customer
[Display(Name = "Клиент")]
public string Customer { get; set; }
public IEnumerable<CostItemViewModel> CostItemViewModel { get; set; } = null;
public SelectProjectViewModel SelectProjectViewModel { get; set; } = new SelectProjectViewModel();
}
Если же Customer
не должно быть в ProjectStageViewModel
, вам нужно удалить или закомментировать строку, которая пытается отобразить заголовок для Customer
в представлении:
<th>
@Html.DisplayNameFor(model => model.Customer)
</th>
После внесения изменений убедитесь, что вы обновили все соответствующие части кода, чтобы избежать дальнейших ошибок.