C# MVC3日期验证在Mac上失败

C# MVC3日期验证在Mac上失败,c#,asp.net-mvc-3,jquery-ui-datepicker,macos,C#,Asp.net Mvc 3,Jquery Ui Datepicker,Macos,短版: 我用ASP.NETMVC3构建了一个简单的网站,但在日期字段、jQuery日期选择器、验证和Mac浏览器方面遇到了一个特殊问题。简而言之,日期字段在PC上正确验证,但在Mac上失败(我尝试过Safari和Firefox):Mac浏览器将触发验证,声称日期格式不正确,但事实并非如此 长版本: 该模型是一个“News”对象,在EF4.1类中定义。我想稍微“扩充”这个类,告诉MVC框架属性“PublishOn”是一个日期,所以我添加了以下代码: [MetadataType(typeof(New

短版:

我用ASP.NETMVC3构建了一个简单的网站,但在日期字段、jQuery日期选择器、验证和Mac浏览器方面遇到了一个特殊问题。简而言之,日期字段在PC上正确验证,但在Mac上失败(我尝试过Safari和Firefox):Mac浏览器将触发验证,声称日期格式不正确,但事实并非如此

长版本:

该模型是一个“News”对象,在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/
中添加了一个模板,以自动向文本框添加“date”css类属性:

@model DateTime 
@Html.TextBox("", Model.ToString("dd-MM-yyyy"), new { @class = "date" })
最后,在我的编辑视图中,我使用了一些jQuery魔术来获得漂亮的日期选择器:

<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>
它发出以下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>

$().ready(函数(){
$('.date').datepicker({constraintInput:false});
});    
[编辑]并从相应属性中删除
[数据类型(数据类型.日期)]
[/EDIT]


请参阅jQuery参考资料,网址为

,我怀疑Mac浏览器不支持您代码中的日期格式,而是使用了系统端设置。。。既然这些可能不同,你就会有如此奇怪的行为……我相信你是对的。但我该如何应对呢?仅为该属性禁用客户端验证是可以的。您可以仅为Mac客户端禁用客户端验证(这需要检查HTTP标头用户代理服务器端或执行浏览器检测客户端并有条件地使用
。日期选择器({constraintInput:false})
)。。如果可以在所有客户端(PC+Mac)上禁用客户端验证,则可以跳过特定于客户端/浏览器的部分。如何同时禁用PC和Mac的验证?抱歉,但它不起作用。问题不是日期选择器(触发验证),而是由MVC框架生成的一般验证。如果我禁用日期选择器,只需手动输入一个日期,如果我只是用斜杠而不是连字符,它就会工作。。。在Mac电脑上。我正在更新问题以显示生成的HTML。你是说服务器端验证失败了吗?请参阅我上面的编辑-这将终止所有客户端验证,直到不起作用为止。首先,我尝试向属性添加UIHint属性,以保持editortemplate的启动。然后我删除了它和数据类型,并使用Html.TextBoxFor来呈现输入字段。同样的结果:在PC上工作,而不是在Mac上……我能想到的另一个选择是将该属性设置为string类型(在C#类中)。。。
<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>