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

wkyowqbh  于 6个月前  发布在  .NET
关注(0)|答案(3)|浏览(82)

我有一个奇怪的问题:一个模型有一个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
错误说:
国籍为必填项
需要注意的是,选择选项通常使用文本和值呈现。

wf82jlnq

wf82jlnq1#

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

字符串

lyr7nygr

lyr7nygr2#

你可能用的是net6。你可以把list设为空

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

字符串

qacovj5a

qacovj5a3#

另一个选择是在视图模式中初始化你的选择列表。你可以在构造函数中完成,或者使用属性初始化器:

public List<SelectListItem> EnvironmentSelectList { get; set; } = new();

字符串

相关问题