【问题标题】:ModelState.IsValid keeps being false because of SelectList in ASP.NET Core由于 ASP.NET Core 中的 SelectList,ModelState.IsValid 一直为 false
【发布时间】:2022-02-26 17:45:29
【问题描述】:

我有一个奇怪的问题:一个模型有一个SelectList,但在POST 动作中,ModelState.IsValid 是假的,因为SelectList

public class CarMakesViewModel 
{
    public Guid Id { get; set; }

    public Microsoft.AspNetCore.Mvc.Rendering.SelectList Nationalities { get; set; }

    public Guid NationalityId { get; set; }
}

在编辑视图中:

<div class="form-group">
    <label asp-for="NationalityId" class="form-label required"></label>
    <select asp-for="NationalityId" name="NationalityId" asp-items="Model.Nationalities" class="form-control "></select>
    <span asp-validation-for="NationalityId" class="text-danger form-control-sm"></span>
</div>

控制器:

[HttpPost]
public async Task<IActionResult> Edit(CarMakesViewModel model)
{
    if (ModelState.IsValid)
    {
       //Edit Code
       return RedirectToAction("Index");
    }

    await GetSelectList(model);

    return View(model);
}

post 中,Nationality SelectList 为空,这很常见,但为什么Model.State.IsValid 总是等于false

错误提示:

国籍是必填项

需要注意的是,选择选项通常以文本和值呈现。

【问题讨论】:

    标签: c# asp.net asp.net-core .net-core asp.net-core-mvc


    【解决方案1】:

    您是否尝试应用[ValidateNever] 属性来删除服务器端Nationalities 的验证?

    当应用于属性时,验证系统会排除该属性。

    public class CarMakesViewModel 
    {
        public Guid Id { get; set; }
    
        [ValidateNever]
        public Microsoft.AspNetCore.Mvc.Rendering.SelectList Nationalities { get; set; }
    
        public Guid NationalityId { get; set; }
    }
    

    【讨论】:

      【解决方案2】:

      你可能使用 net 6。你可以让列表为空

      public Microsoft.AspNetCore.Mvc.Rendering.SelectList? Nationalities { get; set; }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2019-05-27
        • 2018-02-16
        • 2019-05-20
        • 2012-11-26
        • 2011-02-22
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多