Обновление до MVC 3, теперь средство выбора даты не работает - PullRequest
0 голосов
/ 23 августа 2011

В моей предыдущей версии я использовал Date Picker, который по умолчанию мог иметь значение null следующим образом:

<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<System.DateTime?>" %>
<%:Html.TextBox("", (Model.HasValue ? Model.Value.ToShortDateString() : string.Empty), new { @class = "datePicker" }) %>

Теперь я использую

@model DateTime?
@Html.TextBox("", (Model.HasValue ? Model.Value.ToShortDateString() : string.Empty), new { @class = "datePicker" })) 

И это не работает.Когда я щелкаю поле даты, я больше не получаю всплывающее окно.

Таким образом, поле даты выглядит так:

@Html.EditorFor(model => model.contract.GivenDate)

Это поле DateTime.В моем _Layout у меня есть;

$ (function () {$ (". DatePicker"). Datepicker ({showOn: 'both', dateFormat: 'dd / mm / yy'});});

Также я ссылаюсь;

<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.4/jquery.min.js" type="text/javascript"></script>
<script src="@Url.Content("~/Scripts/jquery-ui-1.8.4.custom.min.js")" type="text/javascript"></script>

Так, что я делаю не так?

Ответы [ 4 ]

1 голос
/ 23 августа 2011

У меня работает следующее:

Внутри Views\Home\Index.cshtml:

@model MvcApplication10.Models.FooBar
<!DOCTYPE html>
<html>
    <head>
        <title>Test DateTime?</title>
        <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.4/jquery.min.js" type="text/javascript"></script>
        <script src="http://ajax.googleapis.com/ajax/libs/jqueryui/1.8.4/jquery-ui.js")" type="text/javascript"></script>
        <link rel="Stylesheet" href="http://ajax.googleapis.com/ajax/libs/jqueryui/1.8.4/themes/base/jquery-ui.css" type="text/css" />

        <script type="text/javascript">
            $(function ()
            {
                $(".datePicker").datepicker({ showOn: 'both', dateFormat: 'dd/mm/yy' }); 
            });
        </script>

    </head>

    <body>
        @Html.EditorFor(model => model.GivenDate)
    </body>
</html>

Внутри Views\Shared\EditorTemplates\DateTime.cshtml:

@model DateTime?
@Html.TextBox("", (Model.HasValue ? Model.Value.ToShortDateString() : string.Empty), new { @class = "datePicker" })
@* you'll notice I also removed an extra ) at the end of the last line *@

И наконец Models\FooBar.cs:

public class FooBar
{
    public DateTime? GivenDate { get; set; }
}

Можете ли вы попробовать это, чтобы увидеть, есть ли различия?

0 голосов
/ 24 августа 2011

Я нашел ответ, хотя никаких подсказок в вопросе. Проблема была в том, что я использовал библиотеку javascript;

JQuery-щ-1.8.4.custom.min.js

Когда я отключил его, это сработало. Я подозреваю, что возникли проблемы с именами библиотек. Он работал с jquery-ui-1.8.4.min.js, но сейчас я использую jquery-ui-1.8.10.min.js

0 голосов
/ 23 августа 2011

Я использую идентификатор вместо классов, я также включил функцию различий даты, вы можете удалить ее, если хотите

<script type="text/javascript">
$(document).ready(function () {
    $("#StartDate").datepicker();
    $('#EndDate').datepicker({
        onSelect: function () {
            var diff = dateDiff($('#StartDate').datepicker("getDate"), $('#EndDate').datepicker("getDate"));
            $('#DateDiff').html("Gece Sayısı:" + diff);
        }
    });

    function dateDiff(startDate, endDate) {
        if (endDate && startDate) return (endDate.getTime() - startDate.getTime()) / (1000 * 60 * 60 * 24);
        return "You must complete both dates!";
    }
});

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

    <div class="editor-label">
        @Html.LabelFor(model => model.EndDate)
    </div>
    <div class="editor-field">
        @Html.EditorFor(model => model.EndDate)
        <div id="DateDiff"></div>
        @Html.ValidationMessageFor(model => model.EndDate)
    </div>
0 голосов
/ 23 августа 2011

У меня были проблемы со средством выбора даты jQuery, когда у моих элементов ввода нет идентификатора (который, как я вижу, произойдет с вами здесь, потому что вы не указываете имя при вызове Html.TextBox), возможно, попробуйте назначитьодин?Например,

@Html.TextBox("", (Model.HasValue ? Model.Value.ToShortDateString() : string.Empty), new { @class = "datePicker", id = "someUniqueDatePickerId" }))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...