我在.NET Core MVC中有一个下拉列表,条件是如果已经选择了值,则不必显示该下拉列表,但是如果未选择并保存该下拉列表,则必须显示它并强制用户选择如果他想保存一个。
我试图不通过
绑定下拉列表@if (Model.Input.RoleId == 0)
{
<div class="form-group" id="dvRole">
<label asp-for="Input.RoleId" class="label"></label>
<select asp-for="Input.RoleId" asp-items="@(new
SelectList(Model.User_Role, " ItemCode ", "ItemDisplayName "))" id="ddlRole">
<option value=""></option>
</select>
</div>
}
但是当我单击“保存”时,它给出了错误。我正在检查model.validate
并抛出错误,因为回发时Input.RoleId
没有任何价值。
请提出建议。
属性定义为
[Display(Name = "Role")]
[Required(ErrorMessage = "Please define your role.")]
public int? RoleId { get; set; }
我通过始终绑定下拉列表并使用jquery隐藏div来处理它,但我认为这不是最佳方法。
答案 0 :(得分:0)
RoleId
装饰了[Required(ErrorMessage = "Please define your role.")]
,因此请勿同时将其设置为可选的int?
:[Display(Name = "Role")] [Required(ErrorMessage = "Please define your role.")]public int? RoleId { get; set; }public int RoleId { get; set; }
RoleId
的{{1}}下拉列表中添加空值。最后,按如下所示更改视图:<option value=""></option>
对我有用。
作为旁注,如果必须对 @if (Model.Input.RoleId == 0)
{
<div class="form-group" id="dvRole">
<label asp-for="Input.RoleId" class="label"></label>
<select asp-for="Input.RoleId" asp-items="@(new SelectList(Model.User_Role, "ItemCode", "ItemDisplayName"))" id="ddlRole">
</select>
</div>
}
使用int?
类型,则需要检查RoleId
是Model.Input.RoleId
还是等于{{1 }}。