Во-первых, вам нужно знать, что если вы используете _ValidationScriptsPartial
, он сгенерирует html, как показано ниже:
Generate cs html from:
<input asp-for="MyDate" class="form-control" />
to Атрибут:
<input class="form-control" type="date" data-val="true"
data-val-required="The MyDate field is required."
id="MyDate" name="MyDate" value="">
formnovalidate
и class="cancel"
может пропускать проверку на стороне клиента, но не может пропускать проверку на стороне сервера.
Чтобы устранить эту проблему, можно очистить модель состояние:
1.Модель:
public class Test
{
public int Id { get; set; }
public string Name { get; set; }
}
2.Просмотр (добавить formnovalidate
к save input
):
@model Test
<form asp-action="Request">
<div>
Name:<input asp-for="Name" />
<span asp-validation-for="Name" class="text-danger"></span>
</div>
<div>
Id:<input asp-for="Id" />
<span asp-validation-for="Id" class="text-danger"></span>
</div>
<input name="answer" type="submit" value="Submit" class="btn btn-primary" />
<input name="answer" type="submit" value="Save" formnovalidate class="btn btn-secondary" />
</form>
@section Scripts {
<partial name="_ValidationScriptsPartial" />
}
3.Действие:
[HttpPost]
public IActionResult Request(Test test)
{
if (!ModelState.IsValid)
{
ModelState.Clear();
return View("Index");
}
return View("Index");
}
4.Результат: