簡體   English   中英

Mac上的MVC3日期驗證失敗

[英]MVC3 date validation fails on Mac

簡潔版本:

我使用ASP.NET MVC3構建了一個簡單的網站,但遇到了日期字段,jQuery datepicker,驗證和Mac瀏覽器的特殊問題。 簡而言之,日期字段在PC上已正確驗證,但在Mac上卻未通過(我已經嘗試過Safari和Firefox):Mac瀏覽器將觸發驗證,並聲稱日期格式不正確,即“ t。

長版:

該模型是“新聞”對象,在EF4.1類中定義。 我想稍微擴展一下該類,告訴MVC框架屬性“ PublishOn”是一個日期,因此添加了以下代碼:

[MetadataType(typeof(NewsMetadata))]
public partial class News
{
    // ... 
}

public class NewsMetadata
{
    [DataType(DataType.Date)]
    [Display(Name="Publish on")]
    public DateTime PublishOn { get; set; }
}

然后,我在Views/Shared/EditorTemplates/中添加了一個模板,以自動向文本框添加“日期” css類屬性:

@model DateTime 
@Html.TextBox("", Model.ToString("dd-MM-yyyy"), new { @class = "date" })

最后,在編輯視圖中,我撒了一些jQuery魔術來獲取漂亮的datepicker:

<script src="@Url.Content("~/Scripts/jquery-1.5.1.min.js")" type="text/javascript"></script>
<script src="@Url.Content("~/Scripts/jquery.validate.min.js")" type="text/javascript"></script>
<script src="@Url.Content("~/Scripts/jquery.validate.unobtrusive.min.js")" type="text/javascript"></script>
<script src="@Url.Content("~/Scripts/jquery-ui-1.8.11.min.js")" type="text/javascript"></script>
<link href="@Url.Content("~/Content/themes/base/jquery.ui.all.css")" rel="stylesheet" type="text/css" />
<script type="text/javascript">
  $().ready(function () {
    $('.date').datepicker({ dateFormat: "dd-mm-yy" }); 
  });    
</script>

順便說一句,有關dateFormat: "dd-mm-yy"的注釋dateFormat: "dd-mm-yy"參數:如果我將其設置為“ dd-mm-yyyy”,則datepicker會設置錯誤的值,並帶有一個雙年度,即“ 01-01-20122012” !!! 奇怪。

PublishOn屬性是這樣完成的:

<div class="editor-label">
  @Html.LabelFor(model => model.PublishOn)
 </div>
 <div class="editor-field">
   @Html.EditorFor(model => model.PublishOn)
   @Html.ValidationMessageFor(model => model.PublishOn)
 </div>

發出以下HTML:

<div class="editor-label">
  <label for="PublishOn">Publish on</label>
</div>
<div class="editor-field">
  <input class="date" data-val="true" data-val-required="The Publish on field is required." id="PublishOn" name="PublishOn" type="text" value="22-12-2011" />
  <span class="field-validation-valid" data-valmsg-for="PublishOn" data-valmsg-replace="true"></span>
</div>

這在我的PC上的IE9上完美運行。 但是在Mac(Firefox和Safari)上,驗證就會生效,並聲稱日期格式無效!

根據以上評論中的討論:

禁用客戶端驗證使用

<script src="@Url.Content("~/Scripts/jquery-1.5.1.min.js")" type="text/javascript"></script>
<script src="@Url.Content("~/Scripts/jquery.validate.min.js")" type="text/javascript"></script>
<script src="@Url.Content("~/Scripts/jquery.validate.unobtrusive.min.js")" type="text/javascript"></script>
<script src="@Url.Content("~/Scripts/jquery-ui-1.8.11.min.js")" type="text/javascript"></script>
<link href="@Url.Content("~/Content/themes/base/jquery.ui.all.css")" rel="stylesheet" type="text/css" />
<script type="text/javascript">
  $().ready(function () {
    $('.date').datepicker({ constrainInput: false });
  });    
</script>

[編輯]並從相應屬性中刪除[DataType(DataType.Date)] [/編輯]

請參閱http://jqueryui.com/demos/datepicker/#option-constrainInput上的jQuery參考

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM