Подтвердить что ты не робот

Получите ошибку шаблона, когда я попытаюсь это сделать?

Я использую asp.net mvc 3, и я продолжаю получать эту ошибку, и я не понимаю ее, так как я не использую шаблон.

У меня это в моем частичном представлении

@model ViewModels.FormViewModel

    <div="tabs-1">
        @Html.TextBoxFor(x => x.Due.ToShortDateString())
    </div>

в моей модели просмотра

public class FormViewModel
    {
        public DateTime Due { get; set; }


        public FormViewModel()
        {
            DueDate = DateTime.UtcNow;         
        }
    }

и я получаю эту ошибку

Шаблоны могут использоваться только с полем доступ, доступ к собственности, индекс одномерного массива или однопараметрический пользовательский индекс выражения. Описание: необработанный исключение произошло во время выполнение текущего веб-запроса. Просмотрите трассировку стека информацию об ошибке и он возник из кода.

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

4b9b3361

Ответ 1

Должно быть так:

@Html.TextBoxFor(x => x.Due)

И если вам нужен какой-то формат для этой даты:

[DisplayFormat(DataFormatString = "{0:yyyy-MM-dd}", ApplyFormatInEditMode = true)]
public DateTime Due { get; set; }

а затем:

@Html.EditorFor(x => x.Due)

если вы действительно хотите использовать этот метод .ToShortDateString(), вам нужно использовать не строго типизированный помощник (очевидно, что-то, что я рекомендовал бы против):

@Html.TextBox("Due", Model.Due.ToShortDateString())

Ответ 2

Существует перегрузка, которая может помочь в достижении этого, сохраняя при этом ее строго типизированное значение.

// Specify that you're providing the format argument (string)
@Html.TextBoxFor(x => x.Due, format: Model.Due.ToShortDateString())

// Or use the overload with format and html options, where null is the htmloptions
@Html.TextBoxFor(x => x.Due, Model.Due.ToShortDateString(), null)

Ответ 3

Вы получаете ошибку, потому что хелпер .TextBoxFor() html использует встроенный шаблон (текстовое поле для ввода строки), и вы даете ему слишком сложное лямбда-выражение (т.е. не относится к набор типов, перечисленных в сообщении).

Чтобы решить проблему, измените тип свойства, которое вы хотите изменить, на string, поэтому MVC может использовать шаблон строки по умолчанию или использовать MVC вместо стандартного шаблона даты и времени. Я бы рекомендовал последнее:

@Html.TextBoxFor(m => m.Due)

Если вы недовольны тем, как ваши пользователи просят изменить дату, добавьте частичный вид с именем DateTime.cshtml в ~/Views/Shared/EditorTemplates, где вы создаете редактор, чтобы он работал так, как вы хотите.

Ответ 4

Если вы используете MVC и имеете встроенный элемент кода, попробуйте установить такой параметр -

@{
string parameterValue = DateTime.Parse(@item.Value).ToShortDateString();

}

@Html.DisplayFor(model => parameterValue)

Ответ 5

Вы вводите в заблуждение приложение, передавая метод в параметре textboxfor вместо передачи выражения.

У вас было:

@Html.TextBoxFor(x => x.Due.ToShortDateString())

Сохраните результат в переменной и затем используйте выражение. Попробуйте это

var shortDate = Model.Due.ToShortDateString();
@Html.TextBoxFor(x => shortDate )

Ответ 6

Вместо добавления формата в модели Используйте аннотации @Value, как показано ниже

@Html.TextBoxFor(x = > x.Due new {@Value = Model.Due.ToShortDateString()})