Как проверить, является ли параметр модели >= с шаблоном репозитория

#c# #asp.net-mvc #variables #repository-pattern

Вопрос:

В этом методе я хочу проверить, var Total не превышает ли переменная TotalMonths.

Проблема в том, что var Total сообщение всегда принимается со значением, равным нулю, и я не понимаю, почему. Здесь метод:

 /********EDIT MONTH DETAILS POST*********/  [HttpPost]  [ValidateAntiForgeryToken]  public IActionResult EditMonthDetail(BudgetViewModel budget)  {   //var Total = budget.FBudget.UnitPrice * budget.FBudget.Quantity;  //budget.FBudget.TotalAmount = budget.FBudget.UnitPrice * budget.FBudget.Quantity;  //var Total = _unitOfWork.Budget.Get(budget.FBudget.TotalAmount);  var Total = BudgetVM.FBudget.TotalAmount;   /*Always retrieved with 0*/  if (Total gt;= budget.FBudget.TotalMonths)  {  _unitOfWork.Budget.EditMonthDetails(BudgetVM.FBudget);  _unitOfWork.Save();  return RedirectToAction("Success");  }   return RedirectToAction("FailedTotal");  }  

Вот как общее количество реализовано в модели:

 public float TotalAmount  {  get  {  return UnitPrice * Quantity;  }    }  

Вот представление с формой типа Post:

 @{  Layout = "~/Views/Shared/_Layout.cshtml";  var title = "title";  }    lt;form method="post" asp-action="EditMonthDetail"gt;    lt;div class="row px-2 mx-2"gt;    lt;div class="col-12"gt;  @if (Model.FBudget.BudgetId != 0)  {  lt;input type="hidden" asp-for="FBudget.BudgetId" /gt;  title = "Edit Month details";  }  lt;br /gt;  lt;h2 class="text-primary"gt;@titlelt;/h2gt;  lt;/divgt;    lt;br /gt;  lt;div class="col-8"gt;  lt;div class="form-group row"gt;  lt;div class="col-4"gt;  lt;label asp-for="FBudget.Jan"gt;lt;/labelgt;  lt;/divgt;  lt;div class="col-8"gt;  lt;input asp-for="FBudget.Jan" class="form-control" /gt;  lt;span asp-validation-for="FBudget.Jan" class="text-danger"gt;lt;/spangt;  lt;/divgt;  lt;/divgt;  lt;/divgt;  lt;br /gt;    lt;br /gt;  lt;div class="col-8"gt;  lt;div class="form-group row"gt;  lt;div class="col-4"gt;  lt;label asp-for="FBudget.Feb"gt;lt;/labelgt;  lt;/divgt;  lt;div class="col-8"gt;  lt;input asp-for="FBudget.Feb" class="form-control" /gt;  lt;span asp-validation-for="FBudget.Feb" class="text-danger"gt;lt;/spangt;  lt;/divgt;  lt;/divgt;  lt;/divgt;  lt;br /gt;    lt;br /gt;  lt;div class="col-8"gt;  lt;div class="form-group row"gt;  lt;div class="col-4"gt;  lt;label asp-for="FBudget.Mar"gt;lt;/labelgt;  lt;/divgt;  lt;div class="col-8"gt;  lt;input asp-for="FBudget.Mar" class="form-control" /gt;  lt;span asp-validation-for="FBudget.Mar" class="text-danger"gt;lt;/spangt;  lt;/divgt;  lt;/divgt;  lt;/divgt;  lt;br /gt;    lt;br /gt;  lt;div class="col-8"gt;  lt;div class="form-group row"gt;  lt;div class="col-4"gt;  lt;label asp-for="FBudget.Apr"gt;lt;/labelgt;  lt;/divgt;  lt;div class="col-8"gt;  lt;input asp-for="FBudget.Apr" class="form-control" /gt;  lt;span asp-validation-for="FBudget.Apr" class="text-danger"gt;lt;/spangt;  lt;/divgt;  lt;/divgt;  lt;/divgt;  lt;br /gt;    lt;br /gt;  lt;div class="col-8"gt;  lt;div class="form-group row"gt;  lt;div class="col-4"gt;  lt;label asp-for="FBudget.May"gt;lt;/labelgt;  lt;/divgt;  lt;div class="col-8"gt;  lt;input asp-for="FBudget.May" class="form-control" /gt;  lt;span asp-validation-for="FBudget.May" class="text-danger"gt;lt;/spangt;  lt;/divgt;  lt;/divgt;  lt;/divgt;  lt;br /gt;    lt;br /gt;  lt;div class="col-8"gt;  lt;div class="form-group row"gt;  lt;div class="col-4"gt;  lt;label asp-for="FBudget.Jun"gt;lt;/labelgt;  lt;/divgt;  lt;div class="col-8"gt;  lt;input asp-for="FBudget.Jun" class="form-control" /gt;  lt;span asp-validation-for="FBudget.Jun" class="text-danger"gt;lt;/spangt;  lt;/divgt;  lt;/divgt;  lt;/divgt;  lt;br /gt;    lt;br /gt;  lt;div class="col-8"gt;  lt;div class="form-group row"gt;  lt;div class="col-4"gt;  lt;label asp-for="FBudget.Jul"gt;lt;/labelgt;  lt;/divgt;  lt;div class="col-8"gt;  lt;input asp-for="FBudget.Jul" class="form-control" /gt;  lt;span asp-validation-for="FBudget.Jul" class="text-danger"gt;lt;/spangt;  lt;/divgt;  lt;/divgt;  lt;/divgt;  lt;br /gt;    lt;br /gt;  lt;div class="col-8"gt;  lt;div class="form-group row"gt;  lt;div class="col-4"gt;  lt;label asp-for="FBudget.Ago"gt;lt;/labelgt;  lt;/divgt;  lt;div class="col-8"gt;  lt;input asp-for="FBudget.Ago" class="form-control" /gt;  lt;span asp-validation-for="FBudget.Ago" class="text-danger"gt;lt;/spangt;  lt;/divgt;  lt;/divgt;  lt;/divgt;  lt;br /gt;    lt;br /gt;  lt;div class="col-8"gt;  lt;div class="form-group row"gt;  lt;div class="col-4"gt;  lt;label asp-for="FBudget.Sept"gt;lt;/labelgt;  lt;/divgt;  lt;div class="col-8"gt;  lt;input asp-for="FBudget.Sept" class="form-control" /gt;  lt;span asp-validation-for="FBudget.Sept" class="text-danger"gt;lt;/spangt;  lt;/divgt;  lt;/divgt;  lt;/divgt;  lt;br /gt;    lt;br /gt;  lt;div class="col-8"gt;  lt;div class="form-group row"gt;  lt;div class="col-4"gt;  lt;label asp-for="FBudget.Oct"gt;lt;/labelgt;  lt;/divgt;  lt;div class="col-8"gt;  lt;input asp-for="FBudget.Oct"class="form-control" /gt;  lt;span asp-validation-for="FBudget.Oct" class="text-danger"gt;lt;/spangt;  lt;/divgt;  lt;/divgt;  lt;/divgt;  lt;br /gt;    lt;br /gt;  lt;div class="col-8"gt;  lt;div class="form-group row"gt;  lt;div class="col-4"gt;  lt;label asp-for="FBudget.Nov"gt;lt;/labelgt;  lt;/divgt;  lt;div class="col-8"gt;  lt;input asp-for="FBudget.Nov"class="form-control" /gt;  lt;span asp-validation-for="FBudget.Nov" class="text-danger"gt;lt;/spangt;  lt;/divgt;  lt;/divgt;  lt;/divgt;  lt;br /gt;    lt;br /gt;  lt;div class="col-8"gt;  lt;div class="form-group row"gt;  lt;div class="col-4"gt;  lt;label asp-for="FBudget.Dec"gt;lt;/labelgt;  lt;/divgt;  lt;div class="col-8"gt;  lt;input asp-for="FBudget.Dec"class="form-control" /gt;  lt;span asp-validation-for="FBudget.Dec" class="text-danger"gt;lt;/spangt;  lt;/divgt;  lt;/divgt;  lt;/divgt;  lt;br /gt;    lt;br /gt;    lt;div class="col-8"gt;  lt;div class="form-group row"gt;  lt;div class="col-8 offset-4"gt;  lt;button type="submit" class="btn btn-primary form-control"gt;Updatelt;/buttongt;  lt;/divgt;  lt;/divgt;  lt;/divgt;  lt;/divgt;  lt;/formgt;  

I also tried to create a GetTotalAmount() method in the repository but it doesn’t seems to work.

What am I doing wrong here?

EDIT

Here is the model:

 namespace SalesBudget.Models { public class FBudget {    [Key]  public int BudgetId { get; set; }   [Required(ErrorMessage = "Year is required.")]  public int Year { get; set; }   [Required(ErrorMessage = "FoC is required.")]  public string FreeOfCharge { get; set; }   [Required(ErrorMessage = "Currency is required.")]  public string Currency { get; set; }   [Required(ErrorMessage = "Unit price is required.")]  [Display(Name = "Unit Price")]  public float UnitPrice { get; set; }    public int Jan { get; set; }  public int Feb { get; set; }  public int Mar { get; set; }  public int Apr { get; set; }  public int May { get; set; }  public int Jun { get; set; }  public int Jul { get; set; }  public int Ago { get; set; }  public int Sept { get; set;}  public int Oct { get; set; }  public int Nov { get; set; }  public int Dec { get; set; }   public int TotalMonths   {  get  {  return Jan   Feb   Mar   Apr   May    Jun   Jul   Ago   Sept   Oct   Nov   Dec;  }   }    [Display(Name = "Month Nr")]  [Required(ErrorMessage = "Month Nr is required.")]  [Range(1, 12, ErrorMessage = "The value must be between 1 and 12!")]  public string MonthNr { get; set; }   [Display(Name = "Unit of Measure")]  [Required(ErrorMessage = "Unit of Measure is required.")]  public string UnitOfMeasure { get; set; }    [Display(Name = "Quantity")]  [Required(ErrorMessage = "Quantity in untis is required.")]  public int Quantity { get; set; }   public float TotalAmount  {  get  {  return UnitPrice * Quantity;  }  }   public string LastUser   {  //automatically set the last user that used the app  get; set;  }   public int ProgramId   {  //automatically set the last sw that used the app  get; set;   }   public DateTime LastUpdate { get; set; } = DateTime.Now;    //FKs  //Access to ItemMaster  [Display(Name = "Item")]  public int ItemMasterId { get; set; }  public ItemMaster ItemMaster { get; set; }   //Access to Company  [Display(Name = "Company")]  public int CompanyId { get; set; }  public Company Company { get; set; }   //Access to LedgerType  [Display(Name = "Scenario")]  public int LedgerTypeId { get; set; }  public LedgerType LedgerType { get; set; }   //Access to Customer  [Display(Name = "Customer")]  public int CustomerId { get; set; }  public Customer Customer { get; set; }   } }  

А вот и модель представления:

 namespace SalesBudget.Models.ViewModels {  public class BudgetViewModel  {  public FBudget FBudget { get; set; }  public IEnumerablelt;FBudgetgt; RecordsList { get; set; }    public IEnumerablelt;SelectListItemgt; ItemNumberList { get; set; }  public IEnumerablelt;SelectListItemgt; ItemDescriptionList { get; set; }  public IEnumerablelt;SelectListItemgt; PharmaFormList { get; set; }  public IEnumerablelt;SelectListItemgt; ProductGroupList { get; set; }  public IEnumerablelt;SelectListItemgt; CompanyList { get; set; }  public IEnumerablelt;SelectListItemgt; LedgerTypeList { get; set; }  public IEnumerablelt;SelectListItemgt; LedgerScenarioList { get; set; }  public IEnumerablelt;SelectListItemgt; CustomerList { get; set; }  public IEnumerablelt;SelectListItemgt; LicensingAreaList { get; set; }  public IEnumerablelt;SelectListItemgt; YearsList { get; set; }  public IEnumerablelt;SelectListItemgt; CurrencyList { get; set; }    } }  

Комментарии:

1. К вашему сведению, это не нужно set , если это просто вычисленное значение. И вы проверили значения UnitPrice и Quanity и является ли одно из них 0?

2. Я не вижу вашей модели, и я тоже не вижу ничего о сумме в представлении.

3. @Serge сумма не в этом представлении, потому что она мне здесь не нужна. Но мне нужно сохранить это значение, чтобы сравнить его с TotalAmount, когда будет выполнен запрос post

4. @juharr Да, я знаю, я пытался кое-что сделать. Цена за единицу и количество не равны 0. С помощью отладчика я вижу, что в этой переменной хранится значение.

5. @chdev почему вы используете в своем контроллере BudgetVM вместо бюджета? это может быть вашей проблемой

Ответ №1:

решенный

Я забыл добавить скрытые поля ввода в представление, чтобы получить нужные мне значения:

 lt;div class="col-12"gt;  @if (Model.FBudget.BudgetId != 0)  {  lt;input type="hidden" asp-for="FBudget.BudgetId" /gt;  lt;input type="hidden" asp-for="FBudget.Quantity" /gt;  lt;input type="hidden" asp-for="FBudget.UnitPrice" /gt;  lt;input type="hidden" asp-for="FBudget.TotalAmount" /gt;  title = "Edit Month details";  }  lt;br /gt;  lt;/divgt;  

Поэтому теперь, когда форма отправлена, значения записываются со скрытыми полями.