【发布时间】: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()
{
}
}
预期行为
- 在 GET 上未选择性别
- 当从 SELECT 列表中选择 Male 并单击 SEARCH 时,页面会重新加载
- 页面重新加载男性在列表中被选中。
- 性别标签显示为男性
- 点击清除搜索
OnPostClearSearch()执行,性别设置为“” - 没有选择男性和女性选项的页面方法
- 内存标签中的性别为空白
实际行为
- 在 GET 上未选择性别
- 当从 SELECT 列表中选择 Male 并单击 SEARCH 时,页面会重新加载
- 页面重新加载男性在列表中被选中。
- 性别标签显示为男性
- 点击清除搜索
OnPostClearSearch()被执行,Gender设置为“” - 使用男性和女性选项重新加载页面选择了“男性”,即使在 6 中设置为“”?
<option selected="selected">Male</option> - 性别标签为空
【问题讨论】:
-
它实际上是“选中的”(即
<option selected="selected">出现在呈现的页面源中)还是只是<select>中的默认(即第一个)项目?您是否查看过原始 HTTP 请求以了解发生了什么? -
您是否尝试将选择列表项的 IsSelected 值设置为 false?
-
<option selected="selected">Male</option>在源中呈现 -
@imAbhi 如果参数存在
<option selected="selected">option</option>(已选择)或不存在<option >option</option>(未选择),我该怎么做?没有selected="false",因为这等于真的我相信.
标签: c# razor .net-core razor-pages