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
OnPostClearSearch()
is executed, Gender set to ""Actual Behavior
OnPostClearSearch()
is executed, Gender
set to ""<option selected="selected">Male</option>
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();
}
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With