回发时从模型获取数据

时间:2019-02-13 18:39:51

标签: asp.net-core model-view-controller asp.net-core-mvc

我在.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来处理它,但我认为这不是最佳方法。

1 个答案:

答案 0 :(得分:0)

  1. 由于您已经用属性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; } 
  1. 避免在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?类型,则需要检查RoleIdModel.Input.RoleId还是等于{{1 }}。