Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Core.NET Select List doesn't reset on Postback when bound item reset

I have a SELECT list on a .NET Core razor page that never seems to reset:-

HTML:

    <form asp-page="./TestDropdown" method="post">
        <div class="col-12">
            <strong>Gender in memory: @Model.Gender</strong>
        </div>
        <div class="row">
            <div class="col-md-12">
                 <select asp-for="@Model.Gender" asp-items="@Model.GenderList" class="form-control">
                      <option value="">Gender</option>
                 </select>
            </div>
        </div>

        <div class="row">
            <div class="col-12">
                <input asp-page-handler="Search" type="submit" value="Search" class="btn btn-default btn-block" />
                <input asp-page-handler="ClearSearch" type="submit" value="Clear Search" class="btn btn-warning btn-block" />
            </div>
        </div>
    </form>

C#:

    public class TestDropdownModel : PageModel
    {
        public TestDropdownModel()
        {
            InitSearchList();
        }

        [BindProperty]
        public string Gender { get; set; }

        [BindProperty]
        public SelectList GenderList { get; set; }

        public async Task<ActionResult> OnPostClearSearch()
        {
            Gender = "";
            InitSearchList();
            return Page();
        }

        public async Task<ActionResult> OnPostSearch()
        {
            InitSearchList();
            return Page();
        }

        private void InitSearchList()
        {
            GenderList = new SelectList(new List<string>() { "Male", "Female" })
        }

        public void OnGet()
        {

        }
    }

Expected Behavior

  1. On GET no gender is selected
  2. When Male is selected from the SELECT list and SEARCH clicked the page reloads
  3. The Page reloads Male is selected in the list.
  4. Gender label displayed as Male
  5. Click Clear Search OnPostClearSearch() is executed, Gender set to ""
  6. Page method with Male and Female options nothing selected
  7. Gender in Memory Label is Blank

Actual Behavior

  1. On GET no gender is selected
  2. When Male is selected from the SELECT list and SEARCH clicked the page reloads
  3. The Page reloads Male is selected in the list.
  4. Gender label displayed as Male
  5. Click Clear Search OnPostClearSearch() is executed, Gender set to ""
  6. Page reloads with Male and Female options "Male" selected even though was set to "" in 6 ?? <option selected="selected">Male</option>
  7. Gender Label is empty
like image 634
Welsh King Avatar asked Oct 16 '25 01:10

Welsh King


1 Answers

The value is being repopulated from ModelState. Add ModelState.Clear(); to your OnPostClearSearch method:

public async Task<ActionResult> OnPostClearSearch()
{
    Gender = "";
    ModelState.Clear();
    InitSearchList();
    return Page();
}
like image 161
Mike Brind Avatar answered Oct 18 '25 17:10

Mike Brind



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!