2010-09-16 4 views
2

Можно ли форматировать встроенную строку String.Format внутри форм редактирования, в которой вы используете выражение лямбда с помощью TextBoxFor HTML-помощников?String.Format в выражении лямбда с помощью помощников

Нечто подобное, но это явно не удается, но, надеюсь, вы получите то, что я имею в виду

<%: Html.TextBoxFor(String.Format("{0:d}", model => model.IssueDate), new { @class= "invoiceDate"}) %> 
+0

Вы можете использовать model.IssueDate.ToString ("D")? –

+0

nope, не работает, даже не ToShortDateString(). Предоставляет это исключение. Шаблоны могут использоваться только с доступом к полю, доступом к ресурсам, индексом одномерного массива или однопараметрическими выражениями пользовательского индексатора. " – mare

+0

Нашел ответ на мой первоначальный вопрос о форматировании даты в текстовом поле, см. Мое решение ниже. – mare

ответ

4

По-видимому, я полностью пропустил EditorFor helpers (и есть помощники DisplayFor, которые идут по тем же линиям, что и EditorFor).

Вы можете получить доступ к модели с использованием строго типизированных EditorFor помощника, как это:

<%: Html.EditorFor(model => model.ServiceDate) %> 

Тогда в соображениях/Shared/папки создать подпапку EditorTemplates и создать в нем DateTime.ascx с этим содержимым:

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

Это позволяет нам иметь строго типизированные помощники, но также использовать форматирование для типов свойств.

1

Html.TextBoxFor нужен делегат, но вы передаете это результат вызова String.FormatString.Format, когда передается делегат.

Вы должны поместить вызов String.Format (или, проще, ToString) внутри делегата:

<%: Html.TextBoxFor(model => model.IssueDate.ToString("d"), new { @class= "invoiceDate"}) %> 

Но, как вы обратите внимание на ваш комментарий:

дает это исключение " Шаблоны могут использоваться только с доступом к полю, доступом к ресурсам, индексом одномерного массива или однопараметрическими выражениями пользовательского индексатора ».

Это потому, что Html.TextBoxFor ожидает в Expression<T> и декодирование, что для извлечения которых свойство/метод/поле вы обращаетесь. Затем он будет использовать эту информацию, чтобы позднее получить доступ к члену.

Вы можете использовать Html.TextBox или добавить собственность к типу модели, включая форматирование.

+0

Использование Html.TextBox заставит меня вернуться с использованием не строго типизированных помощников, чего я не хочу. Использование форматированного свойства также не будет работать, потому что данные сохраняются в БД в качестве даты и времени, и мы хотим этого. – mare

+0

Я нашел решение с пользовательскими расширениями html-помощников, но у меня есть проблема, которую я обсуждаю в пересмотренном вопросе. – mare

+0

Re. первый комментарий: форматированное свойство будет считано только для чтения.Это будет только представление данных потребителям (которые читают ее как текст). – Richard

-1

Если это так использовать TextBox вместо TextBoxFor

Как @Html.TextBox("IssueDate",Model.IssueDate.Value.ToLongDateString())

ИЛИ

@Html.TextBox("IssueDate",Model.IssueDate.Value.ToString("dd MM yyyy"))

+0

Что это значит? ясно, я хочу сильную типизацию. Нет сильной типизации с тем, что вы разместили. – mare

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