來自winforms,我對MVC和學習很陌生。所以請耐心等待。 我試圖在MVC中以正確的方式做一些驗證。我有一些使用JS的代碼,但我想修改它以使用MVC進行驗證。MVC中對DateTime的驗證
這是我的模型
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)如果你想覆蓋一個無效值的默認錯誤信息,請參考[這個答案](http://stackoverflow.com/questions/6214066/how-to-change-default-validation-error-message-in -Asp淨MVC)。 (2)使用[萬無一失](http://foolproof.codeplex.com/)'[GreaterThan]'或類似的條件驗證屬性。 (3)不可能 - 如果您允許這兩種格式,那麼控制器將如何知道「16/04/2016」是否是有效日期。 –
但是你沒有顯示MyDateTimePicker()的代碼,所以我們不可能知道這是否生成了正確的html,並且具有客戶端驗證所需的適當'data-val- *'屬性。並且在'DisplayFormatAttribute'中包含'ApplyFormatInEditMode = true'是沒有意義的,因爲它只在'EditorFor()'方法中受到尊重,並且它需要是'DataFormatString =「{0:yyyy-MM-dd}」'反正工作。 –