面对 .Net 6 中数据批注的使用问题

Facing issue the usage of Data Annotations in .Net 6

提问人:Reest 提问时间:10/13/2022 最后编辑:Reest 更新时间:10/17/2022 访问量:388

问:

**嗨,我正在使用 .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字段都需要填写,否则这些字段会给出错误,并且提交按钮不会转到服务器。但是模型中只有“名称”字段是必需的和提到的。**

请给我一个解决方案,我如何限制一些需要填写的字段,有些字段不是必需的。谢谢

asp.net asp.net-mvc ASP.net-core 验证 C#-3.0

评论


答:

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
谢谢,问题已解决,我只缺少这些脚本文件。