【问题标题】:ASP.NET MVC 4 does not work with jquery datepickerASP.NET MVC 4 不适用于 jquery datepicker
【发布时间】:2013-04-18 16:22:25
【问题描述】:

我是 asp.net jquery 和 html5 的初学者,我正在开发一个 asp.net mvc 4 站点,其中有一个包含两个日期字段的表单。我不想手动插入日期,所以我尝试使用这个解决方案来实现一个简单的日期选择器:

     <fieldset>
    <legend>RangeDateViewModel</legend>
    <div class="editor-label">
        Start Date
    </div>
    <div class="editor-field">
        @Html.TextBoxFor(model => model.StartDate,  new{ @class = "date" })
        @Html.ValidationMessageFor(model => model.StartDate)
    </div>

    <div class="editor-label">
        End Date
    </div>
    <div class="editor-field">
        @Html.TextBoxFor(model => model.EndDate,  new{ @class = "date" })
        @Html.ValidationMessageFor(model => model.EndDate)
        </div>

        <p>
            <input type="submit" value="Create" />
        </p>
    </fieldset>


   }

<div>
    @Html.ActionLink("Back to List", "Index")
</div>

@section Scripts {
@Scripts.Render("~/bundles/jqueryval")

@Scripts.Render("~/bundles/jqueryui")
@Styles.Render("~/Content/themes/base/css")

<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-1.5.1.min.js")" type="text/javascript"></script>
<script src="@Url.Content("~/Scripts/jquery-ui-1.8.11.min.js")" type="text/javascript"></script>
<script type="text/javascript">
    $(document).ready(function () {
        $(".date").datepicker();
    });
</script>
}

代码运行良好,但如果我选择从每月 13 日到 30/31 日的日期,我总是会收到相同的警告:“字段 StartDate 必须是日期。”和“EndDate 字段必须是日期。”

编辑: 我按要求添加了我的 ViewModel:

public class RangeDateViewModel
{
    public DateTime StartDate { get; set; }

    public DateTime EndDate { get; set; }

}

【问题讨论】:

  • 反序列化根据 HTTP 方法存在差异。如果您使用 GET,则 binder 将使用 invariantculture 来绑定参数,如果使用 POST,则 binder 将使用 currentculture
  • 我没有看到你的评论@hazzik,对不起。我使用 POST。好的,我该怎么做才能解决这个问题? :)
  • 您需要设置日期格式,以反映您当前在 ASP.NET 应用程序上的文化,如答案中所述。

标签: jquery asp.net jquery-ui asp.net-mvc-4


【解决方案1】:

您需要告诉 DatePicker 您没有使用月份第一日期格式:

$.datepicker.setDefaults({
    dateFormat: "dd/mm/yy"
});

但是,这可能不是您的问题的主要部分(并且根据您的浏览器文化,日期选择器可能已经在使用第一个日期格式)。

首日日期格式和jQuery validation 以及MVC binding 也存在问题。这是我坚持使用year first date format (yyyy-mm-dd) 的主要原因之一,因为它被所有各种库正确解析。

【讨论】:

  • ehm 很抱歉以下愚蠢的问题(我是新手),但我该如何更改我的代码?因为我尝试使用您的代码并且我没有使用日期选择器;我试图写 $(".date").datepicker(); $.datepicker.setDefaults({ dateFormat: "dd/mm/yyyy" });它没有用(总是相同的警报)。对不起
  • datepicker 使用 'y' 表示 2 位数年份,使用 'yy' 表示 4 位数。
  • @antedesk - 你的模型是什么样的?您可以将其添加到您的问题中吗?
  • @JasonBerkan 我将视图模型添加到我的问题中。感谢您的宝贵时间
【解决方案2】:

JQuery 是一种选择,但您可以采用 .NET 方法。我假设 StartDate 和 EndDate 来自 ViewModel 并且属于 DateTime 类型?

只需使用@Html.EditorFor 而不是@Html.TextBoxFor,您的控件就会立即变成DatePickers。

您还可以通过在 ViewModel DateTime 上指定数据注释属性来设置有关日期如何显示和行为的特定规则。例如,这可能是您的 StartDate Viewmodel 属性:

[DisplayFormat(NullDisplayText = "", DataFormatString = "{0:d}")]
[Display(Name = "Start Date")]
public DateTime? StartDate{ get; set; }

不确定如何进一步使用 C# 格式化您的日期选择器?没问题,继续使用 JQuery:

$(':input[data-datepicker]').datepicker({ dateFormat: 'dd/mm/yy' });

【讨论】:

  • 这并没有回答他的问题,但我完全同意并喜欢 MVC 中的编辑器/显示模板。 Antedesk,您可能想查看它们以节省一些时间:D
  • 第二个想法我确实解决了它。我提供了几种不同的方法来正确格式化 DateTime。可能你在我的一些编辑之前做出了表扬:)
  • 在您的编辑中,而不是最初 :) 当您提供答案和 MVC 处理这种情况的正确模式时,我对此表示赞同:D 链接以获取更多信息:growingwiththeweb.com/2012/12/…
  • 该道具上的virtual修饰符的目的是什么?
  • 托尼我会做的:D @Shenaniganz,谢谢你的回答我会试试看(如果我的模拟器决定合作)无论如何你们中的某个人能够回答我的另一个帖子? stackoverflow.com/questions/16058760/…我在使用 double 时遇到了问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-06-11
  • 1970-01-01
  • 1970-01-01
  • 2014-01-17
  • 2012-10-17
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多