【发布时间】:2016-04-15 08:57:53
【问题描述】:
来自winforms,我对MVC和学习很陌生。所以请多多包涵。 我正在尝试在 MVC 中以正确的方式进行一些验证。我有一些使用 JS 的代码,但我想修改它以使用 MVC 进行验证。
这是我的模特
public class MyViewModel
{
/// <summary>
/// Start Date
/// </summary>
[DataType(DataType.Date)]
[DisplayFormat(DataFormatString = "{0:d}",ApplyFormatInEditMode=true)]
[Display(ResourceType = typeof(UIResources.GeneralPurpose), Name = "StartDate")]
public DateTime StartDate { get; set; }
/// <summary>
/// End Date
/// </summary>
[DataType(DataType.Date)]
[DisplayFormat(DataFormatString = "{0:d}", ApplyFormatInEditMode = true)]
[Display(ResourceType = typeof(UIResources.GeneralPurpose), Name = "EndDate")]
public DateTime EndDate { get; set; }
}
这就是我的 html 的样子
@model MyViewModel
@using ...
{
<div id="ErrMsg" class="validation-summary-errors center">
</div>
using (Ajax.BeginForm("someAction", "someController", new AjaxOptions()))
{
@Html.ValidationSummary()
<fieldset class="control-set-container no-border">
<ul class="undecorated-list inline-list-items">
<li>
@Html.LabelFor(model => model.StartDate)
@Html.MyDateTimePicker(model => model.StartDate)
</li>
<li>
@Html.LabelFor(model => model.EndDate)
@Html.MyDateTimePicker(model => model.EndDate)
</li>
</ul>
</fieldset>
}
@Html.MyDateTimePicker 编写一些 HTML,给出一个文本框和一个日期选择器控件(用于以某种日期格式显示日期的文本框)。
这是我要验证的内容,
- 如果日期格式不正确 (dd/MM/yyyy),则应将 errMsg.Html 设置为视图模型中指定的消息。
- 如果 startDate 大于 endDate,则在 errMsg.Html 中显示消息。
- 在此期间,我想验证日期是否为 2 种不同格式之一(dd/MM/yyyy 或 M/d/yyyy),在验证失败时显示错误消息。
【问题讨论】:
-
首先您需要
@Html.ValidationMessageFor(m => m.StartDate)来显示验证错误消息。 (1) 如果您想覆盖无效值的默认错误消息,请参阅this answer。 (2) 使用foolproof[GreaterThan]或类似的条件验证属性。 (3) 不可能 - 如果您允许两种格式,控制器如何知道16/04/2016是否是有效日期。 -
但是您没有显示
MyDateTimePicker()的代码,所以我们不可能知道它是否生成了正确的html,并带有客户端验证所需的适当data-val-*属性。并且在您的DisplayFormatAttribute中包含ApplyFormatInEditMode = true是没有意义的,因为它仅在EditorFor()方法中受到尊重,并且它必须是DataFormatString = "{0:yyyy-MM-dd}"才能正常工作。
标签: c# asp.net-mvc-4 razor