我在 webapp(.NET 核心 MVC)中的模型驗證存在問題-形式上下拉串列很少,這些 DDL 具有運算式所需的不可為空的 int 引數和 SelectListItem 選項串列。我收到訊息,需要 SelectListItem 選項串列(int 引數傳遞為有效)。有什么問題或我錯過了什么?
型號(MyModel fe):
[Required]
[Display(Name = nameof(MyResources.Day), ResourceType = typeof(MyResources))]
public int Day { get; set; }
public IEnumerable<SelectListItem> Days { get; set; }
控制器,GET 方法
[HttpGet]
public IActionResult Index() {
var model = MyModel();
FillModelOptions(model);
return View(model);
}
[HttpPost]
public IActionResult Index(MyModel model) {
if (ModelState.IsValid) {
*save form, go somewhere*
}
FillModelOptions(model);
return View(model);
}
private void FillModelOptions(MyModel model) {
var days = new List<SelectListItem>();
for (var i = 1; i < 32; i ) {
days.Add(new SelectListItem() { Text = i.ToString(), Value = i.ToString() });
}
model.Days = days.AsEnumerable();
}
在我看來@Html.ValidationSummary(false, ""),這會給我帶來隱藏的錯誤:(The Days field is required.但 Days 是 IEnumerable,并且 Day 不為空)
看法:
@using (Html.BeginForm("Index", "MyController", FormMethod.Post) {
{
@Html.AntiForgeryToken()
@Html.ValidationSummary(false, "") @*after post getting The Days field is required*@
<div class="somebootstrapclasses">
@Html.DropDownListFor(model => model.Day, Model.Days, "Select...", new {@, @aria_label="Select..."})
@Html.LabelFor(model => model.Day)
@Html.ValidationMessageFor(model => model.Day)
</div>
}
uj5u.com熱心網友回復:
您在 MyModel 中撰寫這樣的屬性:
public IEnumerable<SelectListItem> Days { get; set; }

該Days屬性默認不可為空(相當于hermit添加了一個[Required]屬性),所以如果你不給這個屬性系結任何值,ModelState.IsValid會回傳false。
如果您不想這樣做,可以通過從 csproj 檔案中洗掉以下行或將其設定為禁用來禁用此功能。默認情況下(.Net 6)值是啟用的。
<Nullable>enable</Nullable>
或者,您可以添加?以使其可為空:
public IEnumerable<SelectListItem>? Days { get; set; }
或者,ModelState忽略此屬性:
if (ModelState.Remove("Days"))
{
*save form, go somewhere*
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/531360.html
標籤:C#验证模型视图控制器asp.net-core-mvc
上一篇:生成隨機密碼進行一次性密碼驗證
下一篇:一種屬性型別取決于其他屬性值
