Используйте jQuery datepicker и представление Create не работает правильно - PullRequest
2 голосов
/ 18 декабря 2011

Я использую ASP.NET MVC3 с Razor View и пытаюсь использовать способ Скотта Аллена для замены DatePicker для типов DateTime.Итак, у меня есть простая модель, подобная этой:

public class Student
{
    public long Id { get; set; }

    [Required]
    public string Name { get; set; }

    [DataType(DataType.DateTime)]
    public DateTime EnterYear { get; set; }

}

до любых изменений все представления работали корректно, но когда я добавляю некоторые коды для использования сборщика данных, у меня возникает проблема: редактирование представления работало правильно, но когда япопробуйте перейти к представлению создания, там есть ошибка:

The model item passed into the dictionary is null, but this dictionary requires a non-
null model item of type 'System.DateTime'.

Description: An unhandled exception occurred during the execution of the current web
request. Please review the stack trace for more information about the error and where 
it originated in the code.

Exception Details: System.InvalidOperationException: The model item passed into the
dictionary is null, but this dictionary requires a non-null model item of type 
'System.DateTime'.

Source Error:
Line 59:         </div>
Line 60:         <div class="editor-field">
Line 61:             @Html.EditorFor(model => model.EnterYear)
Line 62:             @Html.ValidationMessageFor(model => model.EnterYear)
Line 63:         </div>

Source File: d:\Projects\MyProject\Views\Student\Create.cshtml    Line: 61 

есть мои изменения:

1 - Добавить папку EditorTemplates в общую папку в представлении.

2- Добавить частичное представление DateTime в указанную выше папку с помощью:

@model System.DateTime
@Html.TextBox("", ViewData.TemplateInfo.FormattedModelValue
, new { data_datepicker = true })

3 - Добавить новый скрипт в представление _Layout:

/// <reference path="../Scripts/jquery-1.5.1-vsdoc.js" />
/// <reference path="../Scripts/jquery-ui-1.8.11.js" />
$(document).ready(function () {
$(":input[data-datepicker]").datepicker();
})

4 - И добавить необходимые ссылки на скрипты и CSS для _Layout:

 <link href="@Url.Content("~/Content/themes/base/jquery.ui.all.css")" rel="stylesheet"
 type="text/css" />

<script src="@Url.Content("~/Scripts/jquery-ui-1.8.11.min.js")" type="text/javascript">
</script>

в этих реализациях представление «Правка» корректно работало со сборщиком данных, но в представлении «корзина» была ошибка, что случилось с представлением «Создать»?в чем проблема?

1 Ответ

4 голосов
/ 18 декабря 2011
@model System.DateTime
@Html.TextBox("", ViewData.TemplateInfo.FormattedModelValue
, new { data_datepicker = true })

должно быть

@model System.DateTime?
@Html.TextBox("", ViewData.TemplateInfo.FormattedModelValue
, new { data_datepicker = true })

, чтобы учесть пустое значение текстового поля

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...