chobo2 chobo2 - 27 days ago 17
C# Question

Get a template error when I try to do this?

I am using asp.net mvc 3 and I keep getting this error and I don't understand it since I am not using a template.

I have this in my partial view

@model ViewModels.FormViewModel

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


in my viewmodel

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


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


and I get this error


Templates can be used only with field
access, property access,
single-dimension array index, or
single-parameter custom indexer
expressions. Description: An unhandled
exception occurred during the
execution of the current web request.
Please review the stack trace for more
information about the error and where
it originated in the code.

Exception Details:
System.InvalidOperationException:
Templates can be used only with field
access, property access,
single-dimension array index, or
single-parameter custom indexer
expressions.

Answer

Should be like this:

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

And if you want some format for this date:

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

and then:

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

of if you really want to use this .ToShortDateString() method you need to use a non-strongly typed helper (obviously that's something I would recommend against):

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