Asp.net core 使用枚举选择Asp.net核心剃须刀页面
我正在填充一个selectlist,其中包含枚举中的各种预定义间隔(一周、一个月等):Asp.net core 使用枚举选择Asp.net核心剃须刀页面,asp.net-core,select,razor,Asp.net Core,Select,Razor,我正在填充一个selectlist,其中包含枚举中的各种预定义间隔(一周、一个月等): <select asp-for="SelIntvl" asp-items="Html.GetEnumSelectList<KPI.PresetIntervals>()"> </select> 当用户输入开始日期和结束日期时,通过输入按钮应用日期:
<select asp-for="SelIntvl" asp-items="Html.GetEnumSelectList<KPI.PresetIntervals>()">
</select>
当用户输入开始日期和结束日期时,通过输入按钮应用日期:
<p>
@*<input type="submit" value="Apply" />*@
<button class="btn-outline-secondary" type="submit">Apply</button>
</p>
但是,这一次,在页面上,所选选项未正确更新为“自定义”,而是显示以前选择的间隔。为什么呢?如何获取选择列表以显示正确的选择?非常感谢 这里是一个完整的工作演示: 型号:
public enum PresetIntervals
{
None = 0,
Custom = 1,
PastSixMonths = 2,
}
Privacy.cshtml:
@page
@model PrivacyModel
<form>
<div>
StartDate:<input asp-for="StartDate" name="startDate" />
</div>
<div>
EndDate:<input asp-for="EndDate" name="endDate" />
</div>
<div class="form-group">
<label asp-for="SelIntvl" class="control-label"></label>
<select asp-for="SelIntvl" class="form-control" asp-items="Html.GetEnumSelectList<PresetIntervals>()"></select>
</div>
<button class="btn-outline-secondary" type="submit">Apply</button>
</form>
结果:
如果仍然无法在项目中工作,也可以尝试ModelState.Clear()
重置该值:
if (startDate != null && endDate != null)
{
ModelState.Clear();
SelIntvl = PresetIntervals.Custom;
StartDate = DateTime.Parse(startDate);
EndDate = DateTime.Parse(endDate);
}
当我添加ModelState时,它起作用了。明白!非常感谢!不客气!
@page
@model PrivacyModel
<form>
<div>
StartDate:<input asp-for="StartDate" name="startDate" />
</div>
<div>
EndDate:<input asp-for="EndDate" name="endDate" />
</div>
<div class="form-group">
<label asp-for="SelIntvl" class="control-label"></label>
<select asp-for="SelIntvl" class="form-control" asp-items="Html.GetEnumSelectList<PresetIntervals>()"></select>
</div>
<button class="btn-outline-secondary" type="submit">Apply</button>
</form>
public class PrivacyModel : PageModel
{
public PresetIntervals SelIntvl { get; set; }
public DateTime StartDate { get; set; }
public DateTime EndDate { get; set; }
public IActionResult OnGet(string startDate, string endDate)
{
if(startDate == null && endDate == null)
{
SelIntvl = PresetIntervals.PastSixMonths;
}
if (startDate != null && endDate != null)
{
SelIntvl = PresetIntervals.Custom;
StartDate = DateTime.Parse(startDate);
EndDate = DateTime.Parse(endDate);
}
return Page();
}
}
if (startDate != null && endDate != null)
{
ModelState.Clear();
SelIntvl = PresetIntervals.Custom;
StartDate = DateTime.Parse(startDate);
EndDate = DateTime.Parse(endDate);
}