Click here to Skip to main content
15,886,689 members
Please Sign up or sign in to vote.
1.00/5 (1 vote)
I have a problem with the ASP.NET CORE project.

On page Filter, when I click "filter" for the first time, the ViewModel Post back with value, and everything is ok, the result will display.
When I click "filter" again without change any condition. the ViewModel Post back with a null value.

how can I fix this issue?

Page code:
@model ListRenewalViewModel

@inject IAuthorizationService AuthorizationService
@inject IOptions<GeneralOptions> _generalOptions

@{
    ViewData["Title"] = "Renouvellement et relance - Clients résidentiel";
    var isPageReadOnly = (await AuthorizationService.AuthorizeAsync(User, AuthorizationPolicies.TransactionResidential_ReadOnlyAccess)).Succeeded;
}

@section Breadcrumb {
    <section class="container-fluid bg-white shadow-sm">
        <div class="container">
            <div class="d-flex align-items-center justify-content-between align-content-lg-between flex-wrap">
                <nav>
                    <ol class="breadcrumb--custom py-2">
                        <li class="breadcrumb--item">Clients résidentiels</li>
                        <li class="breadcrumb--item active">Renouvellement et relance</li>
                    </ol>
                </nav>
            </div>
        </div>
    </section>
}

<section class="row">
    <div class="col-12">
        <div class="card">
            <div class="card-header bg-white">
                Renouvellement et relance
            </div>
            <form class="needs-validation" method="post" asp-action="Filter" asp-controller="Renewal">
                <div class="card-body">
                    <div class="form-row">
                        @*Renewal*@
                        <div class="col-lg-6 mb-3 mb-lg-0">
                            <div class="card h-100">
                                <div class="card-header">
                                    <div class="custom-control custom-radio">
                                        <input asp-for="RenewalRelaunch" type="radio" id="CheckRenewal" class="custom-control-input w-100 cursor--pointer"
                                               value="@RenewalRelaunch.Renewal">
                                        <label for="CheckRenewal" class="custom-control-label">Renouvellement</label>
                                        <div class="invalid-feedback">
                                            <span asp-validation-for="RenewalRelaunch"></span>
                                        </div>
                                    </div>
                                </div>
                                <div class="card-body">
                                    @*these fields are required only if renewal is selected*@
                                    <div class="custom-control custom-radio">
                                        <input asp-for="RenewalStatus" type="radio" id="CheckNotRenewed" class="custom-control-input"
                                               value="@RenewalStatus.NotRenewed"
                                               disabled="@(Model.RenewalRelaunch == RenewalRelaunch.Relaunch)">
                                        <label for="CheckNotRenewed" class="custom-control-label">Non renouvelé</label>
                                    </div>
                                    <div class="custom-control custom-radio">
                                        <input asp-for="RenewalStatus" type="radio" id="CheckRenewedUnpaid" class="custom-control-input"
                                               value="@RenewalStatus.RenewedUnpaid"
                                               disabled="@(Model.RenewalRelaunch == RenewalRelaunch.Relaunch)">
                                        <label for="CheckRenewedUnpaid" class="custom-control-label">Renouvelé - Non payé</label>
                                        <div class="invalid-feedback">
                                            <span asp-validation-for="RenewalStatus" class="text-danger"></span>
                                        </div>
                                    </div>
                                    @if (Model.ShowContractCheckbox)
                                    {
                                        <div class="custom-control custom-checkbox">
                                            <input asp-for="IsContractChecked" type="checkbox" class="custom-control-input"
                                                   disabled="@(Model.RenewalRelaunch == RenewalRelaunch.Relaunch)">
                                            <label asp-for="IsContractChecked" class="custom-control-label"></label>
                                            <div class="invalid-feedback">
                                                <span asp-validation-for="IsContractChecked" class="text-danger"></span>
                                            </div>
                                        </div>
                                    }
                                </div>
                            </div>
                        </div>


                        @*Relaunch*@
                        <div class="col-lg-6 mb-3 mb-lg-0">
                            <div class="card h-100">
                                <div class="card-header">
                                    <div class="custom-control custom-radio">
                                        <input asp-for="RenewalRelaunch" type="radio" id="CheckRelaunch" class="custom-control-input w-100 cursor--pointer"
                                               value="@RenewalRelaunch.Relaunch">
                                        <label for="CheckRelaunch" class="custom-control-label">Relance</label>
                                        <div class="invalid-feedback">
                                            Veuillez sélectionner une option entre Renouvellement ou Relance.
                                        </div>
                                    </div>
                                </div>
                                <div class="card-body">
                                    <p class="mb-3">Relance pour des superficies totales de 5 000 pi<sup>2</sup> et moins.</p>
                                    <div class="form-inline">
                                        <label class="mr-3">Appliquer jusqu'à </label>
                                        <select asp-for="RelaunchYearId" class="custom-select w-auto"
                                                asp-items="ViewBag.YearSource"
                                                disabled="@(Model.RenewalRelaunch == RenewalRelaunch.Renewal)">
                                            <option value="" selected>--Option--</option>
                                        </select>
                                        <div class="invalid-feedback">
                                            <span asp-validation-for="RelaunchYearId" class="text-danger"></span>
                                        </div>
                                    </div>
                                </div>
                            </div>
                        </div>
                    </div>
                </div>

                @if (Model.RenewalColumns != null)
                {
                    @for (var i = 0; i < Model.RenewalColumns.Count; i++)
                    {
                        <input type="hidden" asp-for="@Model.RenewalColumns[i].ClientId" />
                        <input type="hidden" asp-for="@Model.RenewalColumns[i].ClientName" />
                        <input type="hidden" asp-for="@Model.RenewalColumns[i].FileName" />
                        <input type="hidden" asp-for="@Model.RenewalColumns[i].FileCode" />
                    }
                }


                @*Filter*@
                <div class="card-body py-0">
                    <div class="form-row">
                        <div class="form-group col-sm-4 col-md-3 col-lg-2">
                            <label asp-for="ClientCodeFilter"></label>
                            <input type="text" asp-for="ClientCodeFilter" class="form-control" placeholder="optionnel" maxlength="10">
                        </div>
                        <div class="form-group col-sm-4 col-md-3 col-lg-2">
                            <label asp-for="DeadlineFilter"></label>
                            <input type="date" asp-for="DeadlineFilter" class="form-control" min="2020-01-01" max="2050-12-31" placeholder="AAAA-MM-JJ" pattern="[0-9]{4}-(0[1-9]|1[012])-(0[1-9]|1[0-9]|2[0-9]|3[01])" maxlenght="10">
                            <div class="invalid-feedback">
                                Format : AAAA-MM-JJ
                            </div>
                        </div>
                        <div class="form-group col-sm-6 col-md-4 col-lg-3">
                            <label asp-for="ShipmentTypeFilter"></label>
                            <select asp-for="ShipmentTypeFilter" class="custom-select"
                                    asp-items="@Html.GetEnumSelectList<ShipmentType>()">
                            </select>
                        </div>
                        <div class="form-group col-sm-3 col-md-2 col-lg-2">
                            <label asp-for="YearIdFilter"></label>
                            <select asp-for="YearIdFilter" class="custom-select" required
                                    asp-items="ViewBag.YearSource">
                                <option value="">--Option--</option>
                            </select>
                        </div>
                        <div class="col-lg-3 mt-lg-4 pt-lg-2 mb-3">
                            <button type="submit" class="btn btn-dark">Afficher la liste des clients</button>
                        </div>
                    </div>
                </div>
            </form>


            <form class="needs-validation" novalidate method="post" asp-action="Generate" asp-controller="Renewal">
                <fieldset disabled="@isPageReadOnly">
                    <input type="hidden" asp-for="RenewalRelaunch" value="@Model.RenewalRelaunch" />
                    <input type="hidden" asp-for="RenewalStatus" value="@Model.RenewalStatus" />
                    <input type="hidden" asp-for="RelaunchYearId" value="@Model.RelaunchYearId" />
                    <input type="hidden" asp-for="ClientCodeFilter" />
                    <input type="hidden" asp-for="DeadlineFilter" />
                    <input type="hidden" asp-for="YearIdFilter" />
                    <input type="hidden" asp-for="ShipmentTypeFilter" value="@Model.ShipmentTypeFilter" />
                    <input type="hidden" asp-for="IsContractChecked" />
                    @*Programs*@
                   
                <div class="card-body pt-0">
                    @if (!_generalOptions.Value.CurrentCompany.Equals("AGROVEL", StringComparison.OrdinalIgnoreCase))
                    {
                        <div class="card mt-3">
                            <div class="card-header">
                                Escompte sur les programmes
                            </div>
                            <div class="card-body">
                                <div class="form-row row-cols-1 row-cols-sm-2 rows-cols-md-4 row-cols-lg-6">
                                    <div class="form-group custom-control custom-checkbox col text-center">
                                        <label asp-for="ProfessionnelDiscount"></label>
                                        <div class="input-group has-validation">
                                            <input asp-for="ProfessionnelDiscount" class="form-control form--control--solid text-right" pattern="\d+([,]\d{2})?" maxlength="6">
                                            <div class="input-group-append">
                                                <div class="input-group-text">$</div>
                                            </div>
                                            <div class="invalid-feedback">
                                                <span asp-validation-for="ProfessionnelDiscount" class="text-danger"></span>
                                            </div>
                                        </div>
                                    </div>
                                    <div class="form-group custom-control custom-checkbox col text-center">
                                        <label asp-for="DiamantDiscount"></label>
                                        <div class="input-group has-validation">
                                            <input asp-for="DiamantDiscount" class="form-control form--control--solid text-right" pattern="\d+([,]\d{2})?" maxlength="6">
                                            <div class="input-group-append">
                                                <div class="input-group-text">$</div>
                                            </div>
                                            <div class="invalid-feedback">
                                                <span asp-validation-for="DiamantDiscount" class="text-danger"></span>
                                            </div>
                                        </div>
                                    </div>
                                    <div class="form-group custom-control custom-checkbox col text-center">
                                        <label asp-for="DeluxeDiscount"></label>
                                        <div class="input-group has-validation">
                                            <input asp-for="DeluxeDiscount" class="form-control form--control--solid text-right" pattern="\d+([,]\d{2})?" maxlength="6">
                                            <div class="input-group-append">
                                                <div class="input-group-text">$</div>
                                            </div>
                                            <div class="invalid-feedback">
                                                <span asp-validation-for="DeluxeDiscount" class="text-danger"></span>
                                            </div>
                                        </div>
                                    </div>
                                    <div class="form-group custom-control custom-checkbox col text-center">
                                        <label asp-for="PrestigeDiscount"></label>
                                        <div class="input-group has-validation">
                                            <input asp-for="PrestigeDiscount" class="form-control form--control--solid text-right" pattern="\d+([,]\d{2})?" maxlength="6">
                                            <div class="input-group-append">
                                                <div class="input-group-text">$</div>
                                            </div>
                                            <div class="invalid-feedback">
                                                <span asp-validation-for="PrestigeDiscount" class="text-danger"></span>
                                            </div>
                                        </div>
                                    </div>
                                </div>
                            </div>
                        </div>
                    }
                    @if (Model.RenewalColumns != null)
                    {
                        @for (var i = 0; i < Model.RenewalColumns.Count; i++)
                        {
                            <input type="hidden" asp-for="@Model.RenewalColumns[i].ClientId" />
                            <input type="hidden" asp-for="@Model.RenewalColumns[i].ClientName" />
                            <input type="hidden" asp-for="@Model.RenewalColumns[i].FileName" />
                            <input type="hidden" asp-for="@Model.RenewalColumns[i].FileCode" />
                            <input type="hidden" asp-for="@Model.RenewalColumns[i].FileId" />
                        }
                    }

                    <div class="row mt-3 mb-4">
                        <div class="col text-left text-lg-right">
                            <button type="submit" class="btn btn-primary mb-2 mb-md-0" name="submit" value="generate">Générer l'envoi</button>
                            <button type="submit" class="btn btn-primary mb-2 mb-md-0" name="submit" value="print">Imprimer les cartons</button>
                        </div>
                    </div>
                </div>
                   
                </fieldset>
            </form>

            <div class="card-body">
                <div class="table-responsive">
                    <table class="table custom--datatable table-striped border-bottom">
                        <thead>
                            <tr>
                                <th style="width:330px;">Client</th>
                                <th style="width:330px;">Code Client</th>
                                <th style="width:330px;">Dossier</th>
                                <th class="w-auto">Code dossier</th>
                            </tr>
                        </thead>
                        <tbody>
                            @if (Model.RenewalColumns == null || !Model.RenewalColumns.Any())
                            {
                                <tr class="empty--row">
                                    <td colspan="3">Aucune donnée à afficher</td>
                                </tr>
                            }
                            else
                            {
                                foreach (var column in Model.RenewalColumns)
                                {
                                    <tr>
                                        <td class="text-nowrap">@Html.DisplayFor(_ => column.ClientName)</td>
                                        <td class="text-nowrap">@Html.DisplayFor(_ => column.ClientCode)</td>
                                        <td class="text-nowrap">@Html.DisplayFor(_ => column.FileName)</td>
                                        <td class="text-nowrap">@Html.DisplayFor(_ => column.FileCode)</td>
                                    </tr>
                                }
                            }
                        </tbody>
                    </table>
                </div>
            </div>
        </div>
    </div>
</section>

@*Modal add/edit/delete*@
<div id="PlaceHolderElement"></div>

@if (Model.SuccessMessage.IsNotNullOrWhiteSpace())
{
    <div id="Snackbar" class="snackbar-success">
        <div class="alert alert-success">
            class="far fa-2x fa-check-circle d-block mb-3">
            @Model.SuccessMessage
        </div>
    </div>
}
else if (Model.ErrorMessage.IsNotNullOrWhiteSpace())
{
    <div id="Snackbar" class="snackbar-error">
        <div class="alert alert-danger alert-dismissible fade show">
            <button type="button" class="close" data-dismiss="alert">
                <span aria-hidden="true"</span>
            </button>
            ^__i class="fas fa-2x fa-exclamation-circle d-block my-3">
            @Model.ErrorMessage
        </div>
    </div>
}

@section Scripts {
    @{await Html.RenderPartialAsync("_ValidationScriptsPartial");}
    <script>
        $("#CheckRenewal").click(function () {
            $("#RelaunchYearId").val(null);
            $("#RelaunchYearId").prop('disabled', true);

            $("#CheckNotRenewed").prop('disabled', false);
            $("#CheckRenewedUnpaid").prop('disabled', false);
        })

        $("#CheckRelaunch").click(function () {
            $("#CheckNotRenewed").prop('checked', false);
            $("#CheckRenewedUnpaid").prop('checked', false);
            $("#CheckNotRenewed").prop('disabled', true);
            $("#CheckRenewedUnpaid").prop('disabled', true);

            $("#RelaunchYearId").prop('disabled', false);
        })
    </script>
}


Controller code:
C#
[Authorize(Policy = AuthorizationPolicies.RenewalResidential_TotalAccess)]
    public class RenewalController : Controller
    {
        private const string ListTempDataKey = "RenewalController.Liste";
        private readonly IRenewalPresentationService _renewalPresentationService;
        private readonly IYearPresentationService _yearPresentationService;
        public RenewalController(IRenewalPresentationService renewalPresentationService,
            IYearPresentationService yearPresentationService)
        {
            _renewalPresentationService = renewalPresentationService;
            _yearPresentationService = yearPresentationService;
        }

        private async Task SetDropdownYearAsync(CancellationToken ct)
        {
            this.SetDropDownFromPropertyOfSource
                (
                    "YearSource",
                    await _yearPresentationService.SetDropdownYearAsync(ct),
                    s => s.Id,
                    s => s.Value
                );
        }

        public async Task<ActionResult> Liste([FromQuery] ListRenewalViewModel listRenewalViewModel, CancellationToken ct)
        {
            var tempData = TempData.Get<ListRenewalViewModel>(ListTempDataKey);

            if (tempData != null)
            {
                listRenewalViewModel = tempData;
            }

            await SetDropdownYearAsync(ct);

            return View("List", await _renewalPresentationService.ReadRenewalListAsync(listRenewalViewModel, ct));
        }

        [HttpPost]
        public async Task<ActionResult> Filter(ListRenewalViewModel listRenewalViewModel, CancellationToken ct)
        {
            if (!ModelState.IsValid)
            {
                await SetDropdownYearAsync(ct);
                return View("List", listRenewalViewModel);
            }

            return RedirectToAction("Liste", listRenewalViewModel);
        }

        [Authorize(Policy = AuthorizationPolicies.RenewalResidential_EditAccess)]
        [HttpPost]
        public async Task<ActionResult> Generate(ListRenewalViewModel listRenewalViewModel, string submit, CancellationToken ct)
        {
            if (!ModelState.IsValid)
            {
                await SetDropdownYearAsync(ct);
                return View("List", listRenewalViewModel);
            }

            if (submit.ToLower() == "generate")
            {
                var listRenewal = await _renewalPresentationService.GenerateShipmentAsync(listRenewalViewModel, ct);
                TempData.Put(ListTempDataKey, listRenewal);

                switch (listRenewalViewModel.ShipmentTypeFilter)
                {
                    case ShipmentType.All:
                    case ShipmentType.CustomersByPost:
                        return RedirectToAction("RenewReportIndex", "Report",
                            new RenewReportViewModel
                            {
                                RenewReportType = RenewReportType.RenewReport,
                                RenewIds = await _renewalPresentationService.ReadRenewIdsForReportAsync(listRenewalViewModel, ct)                                
                            });
                    default:
                        break;
                }

            }
            else
            {
                // Imprimer les cartons               
                return RedirectToAction("RenewReportIndex", "Report",
                    new RenewReportViewModel
                    {
                        RenewReportType = RenewReportType.CardRenewReport,
                        RenewIds = await _renewalPresentationService.ReadRenewIdsForReportAsync(listRenewalViewModel, ct)                        
                    });
            }

            return RedirectToAction("Liste");
        }
    }


What I have tried:

I check the code, didn't find the problem.
Posted
Updated 2-Sep-21 3:31am
v3
Comments
Richard Deeming 1-Sep-21 4:39am    
There's a secret error somewhere in your secret code. You need to fix that.

Seriously, how do you expect anyone to help you fix an error in code we cannot see?

Click the green "Improve question" link and update your question to include the relevant parts of your code.
WeiminYu 1-Sep-21 6:03am    
Thank you for your remind. I already update my question.

1 solution

i found when i take 10 or 20 data, everything is ok, but when i take all at one time search, it's not work.
So i think i need to add pagination at List page.
 
Share this answer
 

This content, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)



CodeProject, 20 Bay Street, 11th Floor Toronto, Ontario, Canada M5J 2N8 +1 (416) 849-8900