String.Format в лямбда-выражении с помощниками - PullRequest
2 голосов
/ 16 сентября 2010

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

Что-то вроде этого, но это, очевидно, не получается, но, надеюсь, вы получите то, что я имею в виду

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

Ответы [ 3 ]

4 голосов
/ 18 сентября 2010

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

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

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

Затем в папке Views / Shared / создайте подпапку с именем EditorTemplates и создайте в ней DateTime.ascx со следующим содержимым:

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

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

1 голос
/ 16 сентября 2010

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

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

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

Но, как вы заметили в своем комментарии:

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

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

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

0 голосов
/ 21 июня 2012

В этом случае используйте TextBox вместо TextBox для

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

ИЛИ ЖЕ

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

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