提问人:Reest 提问时间:10/13/2022 最后编辑:Reest 更新时间:10/17/2022 访问量:388
面对 .Net 6 中数据批注的使用问题
Facing issue the usage of Data Annotations in .Net 6
问:
**嗨,我正在使用 .Net 6 和 Visual Studio 2022 社区。
我通过数据注释进行的模型验证适用于所有 HTML 标签,我只想用于某些字段。**
法典:
public class Student
{
public int Id { get; set; }
[Display(Name="Student Name")]
[System.ComponentModel.DataAnnotations.Required(ErrorMessage = "Please provide a value for Name field")]
public string Name { get; set; }
public string Email{ get; set; }
public string Department{ get; set; }
}
}
HTML:我正在使用 Tag helpers 来呈现 HTML 代码。
@model MiddleWareComponents.Models.Student
@{
ViewBag.Title = "Student";
}
<form asp-controller="home" asp-action="student" method="post" class="mt-3">
<div class="form-group row">
<label asp-for="@Model.Name" class="col-sm-2 col-form-label"></label>
<div class="col-sm-10">
<input asp-for="@Model.Name" class="form-control" placeholder="Name">
<span asp-validation-for="@Model.Name" class="text-danger"></span>
</div>
</div>
<div class="form-group row">
<label asp-for="@Model.Department" class="col-sm-2 col-form-label"></label>
<div class="col-sm-10">
<input asp-for="@Model.Department" class="form-control" placeholder="department">
</div>
</div>
<div class="form-group row">
<label asp-for="@Model.Email" class="col-sm-2 col-form-label"></label>
<div class="col-sm-10">
<input asp-for="@Model.Email" class="form-control" placeholder="Email">
</div>
</div>
<div class="form-group row">
<div class="col-sm-10">
<button type="submit" class="btn btn-primary">Create</button>
</div>
</div>
</form>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.6.0/jquery.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery-validate/1.19.3/jquery.validate.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery-validation-unobtrusive/3.2.12/jquery.validate.unobtrusive.js"></script>
**当我们运行代码时,所有html字段都需要填写,否则这些字段会给出错误,并且提交按钮不会转到服务器。但是模型中只有“名称”字段是必需的和提到的。**
请给我一个解决方案,我如何限制一些需要填写的字段,有些字段不是必需的。谢谢
答:
0赞
Giovanni Romio
10/13/2022
#1
如果模型状态无效,则希望返回带有 view-model 而不是空字符串的视图:
[HttpPost]
public string Student(Student student)
{
if (ModelState.IsValid)
{
return RedirectToAction("yourAction", "yourController");
}
else
{
return View(student);
}
}
评论
0赞
Giovanni Romio
10/13/2022
您可以在以下位置找到有关表单验证的其他信息:learn.microsoft.com/en-us/aspnet/core/tutorials/first-mvc-app/...
0赞
Ruikai Feng
10/13/2022
#2
根据您的描述,我认为您可以检查您是否引用了 js 文件,并且 js 文件的顺序是否正确,您可以查看此文档相关以获取更多详细信息:
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.6.0/jquery.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery-validate/1.19.3/jquery.validate.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery-validation-unobtrusive/3.2.12/jquery.validate.unobtrusive.js"></script>
评论
0赞
Reest
10/14/2022
谢谢,问题已解决,我只缺少这些脚本文件。
评论