由于ASP.NET Core中的SelectList,ModelState.IsValid一直为false



我有一个奇怪的问题:一个模型有一个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中,NationalitySelectList为空,这是常见的,但为什么Model.State.IsValid总是等于false

错误显示:

需要民族

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

您是否尝试应用[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; }
}

您可能正在使用net6。你可以让列表成为空

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

最新更新