ASP.Net MVC 3 EditorTemplate для полей даты и времени Ошибка - PullRequest
6 голосов
/ 14 февраля 2011

Этот код был преобразован из некоторого кода ASP.Net MVC 2 в этом учебном пособии:
Шаблон редактора MVC 2 с DateTime

Это пользовательский шаблон EditorTemplate для полей DateTime, хранящийся какEditorTemplates / DateTime.cshtml.

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

Однако при использовании @Html.EditorFor(model => model.NewAbsence.StartDate):

CS1973 возникает ошибка: 'System.Web.Mvc.HtmlHelper' имеетнет подходящего метода с именем «TextBox», но, похоже, есть метод расширения с этим именем.Методы расширения не могут быть динамически отправлены.Подумайте о приведении динамических аргументов или вызове метода расширения без синтаксиса метода расширения.

Здесь я видел несколько похожих постов, в которых упоминается приведение параметра метода EditorFor, однако я не могу получитьэто работать в моем примере.

Может кто-нибудь указать, что мне нужно изменить в моем коде.Благодаря.

Ответы [ 4 ]

11 голосов
/ 15 февраля 2011

На самом деле это @model в нижнем регистре m:

@model DateTime?
 ^

вместо:

@Model DateTime?
4 голосов
/ 25 февраля 2011

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

@model dynamic

Тогда такие вещи, как методы расширения, не смогут определить типы передаваемых им аргументов. Вот два примера (использование Razor, потому что это круто):

@Html.TextBox("myTextBoxName", Model.MyTextBoxValue)
@Html.DropDownList("myDropDownName", Model.MySelectList))

В этих случаях движок не знает, что такое Model.MyTextBoxValue или Model.MySelectList, поэтому он не может выяснить, какие перегрузки методов расширения компилируются. Таким образом, вы просто помогаете ему в этом с помощью строгой печати:

@Html.TextBox("myTextBoxName", (string)Model.MyTextBoxValue)
@Html.DropDownList("myDropDownName", (SelectList)Model.MySelectList))

Кстати, просто чтобы не дать людям потенциально выдернуть волосы, этот список SelectList должен быть правильно создан с чем-то вроде:

var items = List<SelectListItem>();
...
new SelectList(items, "Value", "Text");
0 голосов
/ 21 февраля 2011

Сообщение об ошибке приходит из вашего текстового поля.В шаблоне это становится динамическим выражением, и .Net не знает, как набирать свойства модели.

@Html.TextBox("", (string)(Model==null ? Model.Value.ToShortDateString() : string.Empty), new { style = "width: 10em;", @class="datefield" })

Явно приводит ваше значение даты в виде строки, и динамическое выражение имеет необходимую информацию,У меня также была проблема со свойством .HasValue, но вопрос не в этом.

0 голосов
/ 14 февраля 2011

В качестве временной работы я использую:

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

Затем с помощью селектора jQuery:

 $(".date-field > input").datepicker({
                showOn: "button",
                buttonImage: "*pathtoimage*"
            });

Чтобы применить средство выбора даты к тэгам ввода в поле «поле даты». Однако это все равно не форматирует значение даты так, как я хочу, чтобы оно отображалось изначально, и полностью исключает шаблон редактора.

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