2017-02-08 8 views
2

Я следую this примеру использование jQuery UI Datepicker in my MVC project.с помощью JQuery UI Datepicker в MVC бритве получает ошибку

Модель

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

Razor

<div class="form-group"> 
    @Html.LabelFor(model => model.RequestDate, htmlAttributes: new { @class = "control-label col-md-2" }) 
<div class="col-md-10"> 
    @Html.EditorFor(model => model.RequestDate) 
    @Html.ValidationMessageFor(model => model.RequestDate, "", new { @class = "text-danger" }) 
</div> 

Тогда согласно учебнику создана Дате помощник и вставил эту строку

@Html.TextBox("", String.Format("{0:d}", (string)Model.ToShortDateString()), new { @class = "datefield", @type = "date" }) 

Когда я запускаю приложение, я получаю исключение во время выполнения для указанной выше строки. Модель равна нулю. Я не уверен, почему? и как это связано с моей моделью?

Дополнительная информация: Не удается выполнить привязку выполнения на нуль эталонным

DatePickerReady.js

if (!Modernizr.inputtypes.date) { 
    $(function() { 
     $(".datefield").datepicker(); 
    }); 
} 
+1

Потому что 'Model' является' null', и вы не можете вызывать '.ToShortDateString()' on 'null' - просто удалите' (string) Model.ToShortDateString()) из 'TextBox()' methd. (и добавление '@type =" date "в view и' [DataType (DataType.Date)] 'бессмысленно, если вы используете jQuery datepicker). –

+0

Но для этого вам не нужен 'EditorTemplate'. Просто замените '@ Html.EditorFor (model => model.RequestDate)' на '@ Html.TextBoxFor (m => m.RequestDate," {0: d} ", новый {@class =" datefield "})' –

+0

И вы используете неправильную перегрузку 'TextBox()' anyway - третий параметр - это строка формата - [refer docs] (https://msdn.microsoft.com/en-us/library/system.web.mvc.html .inputextensions.textbox (v = vs.118) .aspx # М: System.Web.Mvc.Html.InputExtensions.TextBox% 28System.Web.Mvc.HtmlHelper, System.String, System.Object, System.String, система. Collections.Generic.IDictionary {System.String, System.Object}% 29) –

ответ

0

Я думаю, ваша проблема вызвана литейной части (string)Model.ToShortDateString(), нет необходимости в литье здесь как ToShortDateString в любом случае вернет string. Попробуйте вместо этого:

@Html.TextBox("", String.Format("{0:d}", Model.ToShortDateString()), 
    new { @class = "datefield", @type = "date" }) 

И вы должны убедиться, чтобы назвать ваш шаблон редактора имя соответствия типа данных (DateTime.cshtml в вашем случае) или используйте атрибут UIHint, если вы хотите изменить имя, и убедитесь, что вы добавили свой шаблон под соответствующей папкой EditorTemplates.

+0

Должен ли я попробовать выше строку в дополнение к тому, что я сделал? Мне все еще нужно сохранить editorTemplate, который вызывает проблемы? Все, что я хочу использовать jQuery DatePicker в моем режиме бритвы – simbada

+0

Вышеупомянутая строка является заменой содержимого вашего 'EditorTemplate'. Использование шаблонов редактора - хорошая практика, которая улучшит вашу совместимость и повторное использование ваших кодов, продолжайте использовать их :) –

 Смежные вопросы

  • Нет связанных вопросов^_^