在 MVC 中获取验证异常

Getting vailidation anomalies in MVC

我正在关注这个 (https://docs.microsoft.com/en-us/aspnet/mvc/overview/older-versions-1/getting-started-with-mvc/getting-started-with-mvc-part7),但是我在查看网页时看到了一些奇怪的东西。

1) ReleaseDate 说它是一个必需的文件(即使它在代码中没有标记),我不明白为什么要这样做。

2) Price "works" 如果值为 100.50 或更小。如果它的 100.51 或更高,则消息开始。我的理解是消息应该开始 @ 100.01... 或者我错了吗?

namespace Movies.Models
{
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;

public partial class Movie
{
    public int Id { get; set; }

    [Required(ErrorMessage = "Titles are required")]
    public string Title { get; set; }

    public System.DateTime ReleaseDate { get; set; }

    public string Genre { get; set; }

    [Required(ErrorMessage = "The Price is required.")]
    [Range(5, 100, ErrorMessage = "Movies cost between £5 and £100.")]
    public decimal Price { get; set; }
}
}

有人可以指出我做错了什么吗?

谢谢

查看代码为

@model Movies.Models.Movie

@{
ViewBag.Title = "Create";
}

<h2>Create</h2>

@using (Html.BeginForm()) 
{
@Html.AntiForgeryToken()

<div class="form-horizontal">
    <h4>Movie</h4>
    <hr />
    @Html.ValidationSummary(true, "", new { @class = "text-danger" })
    <div class="form-group">
        @Html.LabelFor(model => model.Title, htmlAttributes: new { @class = "control-label col-md-2" })
        <div class="col-md-10">
            @Html.EditorFor(model => model.Title, new { htmlAttributes = new { @class = "form-control" } })
            @Html.ValidationMessageFor(model => model.Title, "", new { @class = "text-danger" })
        </div>
    </div>

    <div class="form-group">
        @Html.LabelFor(model => model.ReleaseDate, htmlAttributes: new { @class = "control-label col-md-2" })
        <div class="col-md-10">
            @Html.EditorFor(model => model.ReleaseDate, new { htmlAttributes = new { @class = "form-control" } })
            @Html.ValidationMessageFor(model => model.ReleaseDate, "", new { @class = "text-danger" })
        </div>
    </div>

    <div class="form-group">
        @Html.LabelFor(model => model.Genre, htmlAttributes: new { @class = "control-label col-md-2" })
        <div class="col-md-10">
            @Html.EditorFor(model => model.Genre, new { htmlAttributes = new { @class = "form-control" } })
            @Html.ValidationMessageFor(model => model.Genre, "", new { @class = "text-danger" })
        </div>
    </div>

    <div class="form-group">
        @Html.LabelFor(model => model.Price, htmlAttributes: new { @class = "control-label col-md-2" })
        <div class="col-md-10">
            @Html.EditorFor(model => model.Price, new { htmlAttributes = new { @class = "form-control" } })
            @Html.ValidationMessageFor(model => model.Price, "", new { @class = "text-danger" })
        </div>
    </div>

    <div class="form-group">
        <div class="col-md-offset-2 col-md-10">
            <input type="submit" value="Create" class="btn btn-default" />
        </div>
    </div>
</div>
}

<div>
    @Html.ActionLink("Back to List", "Index")
</div>

第一个问题。

像这样让你的 DateTime 可以为空:

public System.DateTime? ReleaseDate { get; set; }

第二个问题:

使用文字 d 将范围数字类型指定为 double,如下所示:

[Range(5d, 100d, ErrorMessage = "Movies cost between £5 and £100.")]
public decimal Price { get; set; }