必需属性在 ASP.NET 中不起作用

Posted

技术标签:

【中文标题】必需属性在 ASP.NET 中不起作用【英文标题】:Required attribute not working in ASP.NET 【发布时间】:2021-07-24 22:49:58 【问题描述】:

我已经创建了这个 C# 文件以在 ASP.NET 5.0 中搭建。问题是我不希望家庭号码是必需的,但生成的页面(具有实体框架的控制器)Create 仍然如此计算。知道为什么会发生这种情况吗?

public class Patient
    
        [Key]
        public string MRN  get; set; 
        [Required]
        public string FirstName  get; set; 
        [Required]
        public string MiddleName  get; set; 
        [Required]
        public string LastName  get; set; 
        [Required]
        public string Address  get; set; 
        [Required]
        public string Gender  get; set; 
        [Required]
        [Display(Name = "Mobile Number")]
        public int MobNumber  get; set;        
        [Display(Name = "Home Number")]
        public int HomeNumber  get; set;       
        [Required]
        public string Nationality  get; set; 
            

    

这是Create.cshtml 的代码,它曾经工作的奇怪之处,现在每次我尝试生成控制器和视图时,都需要家庭号码。

@
    ViewData["Title"] = "Create";


<h1>Create</h1>

<h4>Patient</h4>
<hr />
<div class="row">
    <div class="col-md-4">
        <form asp-action="Create">
            <div asp-validation-summary="ModelOnly" class="text-danger"></div>
            <div class="form-group">
                <label asp-for="MRN" class="control-label"></label>
                <input asp-for="MRN" class="form-control" />
                <span asp-validation-for="MRN" class="text-danger"></span>
            </div>
            <div class="form-group">
                <label asp-for="FirstName" class="control-label"></label>
                <input asp-for="FirstName" class="form-control" />
                <span asp-validation-for="FirstName" class="text-danger"></span>
            </div>
            <div class="form-group">
                <label asp-for="MiddleName" class="control-label"></label>
                <input asp-for="MiddleName" class="form-control" />
                <span asp-validation-for="MiddleName" class="text-danger"></span>
            </div>
            <div class="form-group">
                <label asp-for="LastName" class="control-label"></label>
                <input asp-for="LastName" class="form-control" />
                <span asp-validation-for="LastName" class="text-danger"></span>
            </div>
            <div class="form-group">
                <label asp-for="Address" class="control-label"></label>
                <input asp-for="Address" class="form-control" />
                <span asp-validation-for="Address" class="text-danger"></span>
            </div>
            <div class="form-group">
                <label asp-for="Gender" class="control-label"></label>
                <input asp-for="Gender" class="form-control" />
                <span asp-validation-for="Gender" class="text-danger"></span>
            </div>
            <div class="form-group">
                <label asp-for="MobNumber" class="control-label"></label>
                <input asp-for="MobNumber" class="form-control" />
                <span asp-validation-for="MobNumber" class="text-danger"></span>
            </div>
            <div class="form-group">
                <label asp-for="HomeNumber" class="control-label"></label>
                <input asp-for="HomeNumber" class="form-control" />
                <span asp-validation-for="HomeNumber" class="text-danger"></span>
            </div>
            <div class="form-group">
                <label asp-for="Nationality" class="control-label"></label>
                <input asp-for="Nationality" class="form-control" />
                <span asp-validation-for="Nationality" class="text-danger"></span>
            </div>
            <div class="form-group">
                <input type="submit" value="Create" class="btn btn-primary" />
            </div>
        </form>
    </div>
</div>

<div>
    <a asp-action="Index">Back to List</a>
</div>

@section Scripts 
    @await Html.RenderPartialAsync("_ValidationScriptsPartial");

【问题讨论】:

你能把Create的控制器代码放上去吗? 如下所述,您需要使您的属性可以为空。但是,请记住,电话号码不是整数。使用int(或int?)是一个糟糕的选择。使用字符串来存储这些值并使用属性/数据注释来确保它们是有效的 【参考方案1】:

如果你不希望值是必需的,你应该让它们可以为空:

[Display(Name = "Home Number")]
public int? HomeNumber  get; set; 

【讨论】:

以上是关于必需属性在 ASP.NET 中不起作用的主要内容,如果未能解决你的问题,请参考以下文章

自定义授权过滤器在 ASP.NET Core 3 中不起作用

下拉列表在 asp.net 的移动视图中不起作用

Asp.net 按钮 onclick 在更新面板中不起作用

为啥我的正则表达式在 ASP.NET 中不起作用

动态查询在 asp.net 中不起作用

回发后,我的 JavaScript 函数在 ASP.NET 中不起作用