绑定项目重置时,Core.NET选择列表不会在回发时重置

时间:2019-09-19 14:22:12

标签: c# razor .net-core razor-pages

.NET Core剃须刀页面上有一个SELECT列表,它似乎从未重置过:-

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()
        {

        }
    }

预期行为

  1. 获取时未选择性别
  2. 从“选择”列表中选择“男性”并点击“搜索”后,页面会重新加载
  3. 在页面中选择了页面重新加载男性。
  4. 性别标签显示为男性
  5. 点击清除搜索OnPostClearSearch(),性别设置为“”
  6. 未选择男性和女性选项的页面方法
  7. 内存标签中的性别为空

实际行为

  1. 获取时未选择性别
  2. 从“选择”列表中选择“男性”并点击“搜索”后,页面会重新加载
  3. 在页面中选择了页面重新加载男性。
  4. 性别标签显示为男性
  5. 点击清除搜索OnPostClearSearch()已执行,Gender设置为“”
  6. 页面重新加载,其中男性和女性选项为“男性”已选择,即使在6中设置为“”? <option selected="selected">Male</option>
  7. 性别标签为空

1 个答案:

答案 0 :(得分:1)

正在从ModelState重新填充该值。将ModelState.Clear();添加到您的OnPostClearSearch方法中:

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