【问题标题】:Core.NET Select List doesn't reset on Postback when bound item reset绑定项目重置时,Core.NET 选择列表不会在回发时重置
【发布时间】:2020-01-20 14:46:35
【问题描述】:

我在 .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. 在 GET 上未选择性别
  2. 当从 SELECT 列表中选择 Male 并单击 SEARCH 时,页面会重新加载
  3. 页面重新加载男性在列表中被选中。
  4. 性别标签显示为男性
  5. 点击清除搜索OnPostClearSearch()执行,性别设置为“”
  6. 没有选择男性和女性选项的页面方法
  7. 内存标签中的性别为空白

实际行为

  1. 在 GET 上未选择性别
  2. 当从 SELECT 列表中选择 Male 并单击 SEARCH 时,页面会重新加载
  3. 页面重新加载男性在列表中被选中。
  4. 性别标签显示为男性
  5. 点击清除搜索OnPostClearSearch()被执行,Gender设置为“”
  6. 使用男性和女性选项重新加载页面选择了“男性”,即使在 6 中设置为“”? &lt;option selected="selected"&gt;Male&lt;/option&gt;
  7. 性别标签为空

【问题讨论】:

  • 它实际上是“选中的”(即&lt;option selected="selected"&gt; 出现在呈现的页面源中)还是只是&lt;select&gt; 中的默认(即第一个)项目?您是否查看过原始 HTTP 请求以了解发生了什么?
  • 您是否尝试将选择列表项的 IsSelected 值设置为 false?
  • &lt;option selected="selected"&gt;Male&lt;/option&gt; 在源中呈现
  • @imAbhi 如果参数存在&lt;option selected="selected"&gt;option&lt;/option&gt;(已选择)或不存在&lt;option &gt;option&lt;/option&gt;(未选择),我该怎么做?没有selected="false",因为这等于真的我相信.

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


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 2016-05-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-11-30
    • 2011-03-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多