Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/319.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何修复在.NET中不起作用的“必需”批注_C#_Asp.net_.net_Asp.net Mvc - Fatal编程技术网

C# 如何修复在.NET中不起作用的“必需”批注

C# 如何修复在.NET中不起作用的“必需”批注,c#,asp.net,.net,asp.net-mvc,C#,Asp.net,.net,Asp.net Mvc,我将遵循本教程: 这是我的电影模特课: using System; using System.ComponentModel.DataAnnotations; using System.ComponentModel.DataAnnotations.Schema; public class Movie { public int ID { get; set; } [StringLength(60, MinimumLength = 3)] [Required] pub

我将遵循本教程:

这是我的电影模特课:

using System;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;

public class Movie
{
    public int ID { get; set; }

    [StringLength(60, MinimumLength = 3)]
    [Required]
    public string Title { get; set; }

    [Display(Name = "Release Date")]
    [DataType(DataType.Date)]
    public DateTime ReleaseDate { get; set; }

    [Range(1, 100)]
    [DataType(DataType.Currency)]
    [Column(TypeName = "decimal(18, 2)")]
    public decimal Price { get; set; }

    [RegularExpression(@"^[A-Z]+[a-zA-Z""'\s-]*$")]
    [Required]
    [StringLength(30)]
    public string Genre { get; set; }
}
但当我在本地网站上测试时,这两个字段:标题和类型似乎没有我预期的验证,请参见下面的屏幕截图:

以下是我的控制器操作形式:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc.RazorPages;
using Microsoft.AspNetCore.Mvc.Rendering;
using RazorPagesMovie.Models;

namespace RazorPagesMovie.Pages.Movies
{
    public class CreateModel : PageModel
    {
        private readonly RazorPagesMovie.Models.RazorPagesMovieContext _context;

        public CreateModel(RazorPagesMovie.Models.RazorPagesMovieContext context)
        {
            _context = context;
        }

        public IActionResult OnGet()
        {
            return Page();
        }

        [BindProperty]
        public Movie Movie { get; set; }

        public async Task<IActionResult> OnPostAsync()
        {
            if (!ModelState.IsValid)
            {
                return Page();
            }

            _context.Movie.Add(Movie);
            await _context.SaveChangesAsync();

            return RedirectToPage("./Index");
        }
    }
}
以下是我的Create.cshtml:

@page
@model RazorPagesMovie.Pages.Movies.CreateModel

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

<h1>Create</h1>

<h4>Movie</h4>
<hr />
<div class="row">
    <div class="col-md-4">
        <form method="post">
            <div asp-validation-summary="ModelOnly" class="text-danger"></div>
            <div class="form-group">
                <label asp-for="Movie.Title" class="control-label"></label>
                <input asp-for="Movie.Title" class="form-control" />
                <span asp-validation-for="Movie.Title" class="text-danger"></span>
            </div>
            <div class="form-group">
                <label asp-for="Movie.ReleaseDate" class="control-label"></label>
                <input asp-for="Movie.ReleaseDate" class="form-control" />
                <span asp-validation-for="Movie.ReleaseDate" class="text-danger"></span>
            </div>
            <div class="form-group">
                <label asp-for="Movie.Genre" class="control-label"></label>
                <input asp-for="Movie.Genre" class="form-control" />
                <span asp-validation-for="Movie.Genre" class="text-danger"></span>
            </div>
            <div class="form-group">
                <label asp-for="Movie.Price" class="control-label"></label>
                <input asp-for="Movie.Price" class="form-control" />
                <span asp-validation-for="Movie.Price" 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-page="Index">Back to List</a>
</div>

@section Scripts {
    @{await Html.RenderPartialAsync("_ValidationScriptsPartial");}
}
以下是我的文件夹结构:

起初我认为可能会有一系列的验证,但实际上,在我填写了发行日期和价格之后,我甚至可以在不填写片名和类型的情况下创作一部电影。显然,这两个字段的验证不起作用

有谁能分享一些见解吗


谢谢

您的必填字段从不为空,它是空字符串,您必须防止字段被空字符串传递,如下所示:

[StringLength(60, MinimumLength = 3)]
[Required(AllowEmptyStrings =false)]
public string Title { get; set; }

对于必填字段验证,请使用[BindRequiredErrorMessage=Title required]而不是[RequiredErrorMessage=Title required]来修饰您的函数。

请与我们分享您为达到验证阶段而执行的步骤。请向我们展示视图和控制器操作的代码。刚刚用Create.cshtml.cs页面编辑了我的帖子。您还需要什么吗?只是为了测试,您可以分配[RequiredErrorMessage=test]-属性并再次检查吗?我只是这样做了,没有做任何更改@vladimir,以下是我所做的:[StringLength60,MinimumLength=3][RequiredErrorMessage=test]公共字符串标题{get;set;}是您想要的吗?自定义错误消息没有显示。您是否包含JavaScript资源?