请注意,代码如何使用Html.EditorFor helper 输出为Movie中的每个属性的<input>元素。此Helper旁边是对Html.ValidationMessageFor方法的调用。这两个Helper方法将处理由控制器传递到视图的模型对象(在这里是,Movie对象)。它们会自动查找模型中指定的验证属性,并显示适当的错误消息。
如果您想要在后面更改验证逻辑,您可以做在一个地方,将验证信息添加到模型上。 (此示例中,是movie 类)。您不必担心不符合规则 ,验证逻辑会在应用程序的不同部分执行——在一个地方定义验证逻辑将会被使用到各个地方。这使代码非常干净,并使它易于维护和扩展。它意味着您会完全遵守DRY原则。
给影片模型添加Formatting
打开Movie.cs文件并查看Movie 类。 System.ComponentModel.DataAnnotations命名空间提供了内置的验证特性集的格式属性。我们已经为发布日期和价格字段应用了DataType枚举值。下面的代码示例了ReleaseDate和Price属性与相应的DisplayFormat属性。
[DataType(DataType.Date)] public DateTime ReleaseDate { get; set; } [DataType(DataType.Currency)] public decimal Price { get; set; }
DataType属性不是验证特性,它们用来告诉视图引擎如何Render HTML 。在上面的示例中, DataType.Date属性将影片日期显示为日期,例如,下面的DataType属性不会验证数据的格式:
复制代码 代码如下:
[DataType(DataType.EmailAddress)]
[DataType(DataType.PhoneNumber)]
[DataType(DataType.Url)]
上面列出的属性只提供视图引擎来显示数据的格式(如:<a> 为 URL ,< href="https://www.jb51.net/mailto:EmailAddress.com"> 为电子邮件。您可以使用正则表达式属性来验证数据的格式。)
另一种使用DataType 属性的方式,您可以显式设置DataFormatString。下面的代码示例了具有一个日期格式字符串的Release Date属性 (即"d")。
复制代码 代码如下:
[DisplayFormat(DataFormatString = "{0:d}")]
public DateTime ReleaseDate { get; set; }
下面的代码设置Price属性为货币格式。
复制代码 代码如下:
[DisplayFormat(DataFormatString = "{0:c}")]
public decimal Price { get; set; }
完整的Movie 类如下所示。
@model MvcMovie.Models.Movie @{ ViewBag.Title = "Create"; } <h2>Create</h2> <script src="https://www.jb51.net/@Url.Content("~/Scripts/jquery.validate.min.js")"></script> <script src="https://www.jb51.net/@Url.Content("~/Scripts/jquery.validate.unobtrusive.min.js")"></script> @using (Html.BeginForm()) { @Html.ValidationSummary(true) <fieldset> <legend>Movie</legend> <div> @Html.LabelFor(model => model.Title) </div> <div> @Html.EditorFor(model => model.Title) @Html.ValidationMessageFor(model => model.Title) </div> <div> @Html.LabelFor(model => model.ReleaseDate) </div> <div> @Html.EditorFor(model => model.ReleaseDate) @Html.ValidationMessageFor(model => model.ReleaseDate) </div> <div> @Html.LabelFor(model => model.Genre) </div> <div> @Html.EditorFor(model => model.Genre) @Html.ValidationMessageFor(model => model.Genre) </div> <div> @Html.LabelFor(model => model.Price) </div> <div> @Html.EditorFor(model => model.Price) @Html.ValidationMessageFor(model => model.Price) </div> <div> @Html.LabelFor(model => model.Rating) </div> <div> @Html.EditorFor(model => model.Rating) @Html.ValidationMessageFor(model => model.Rating) </div> <p> <input type="submit" value="Create" /> </p> </fieldset> } <div> @Html.ActionLink("Back to List", "Index") </div>
运行该应用程序并浏览到Movies控制器。很好的格式化了发布日期和价格。下图显示了Release Date和使用 "FR-FR" Culture 的Price。
下图为默认Culture的显示(English US) 。
在下一部分,我们先会看看代码,然后再改进一下自动生成的Details 和 Delete 方法。
您可能感兴趣的文章: