当我尝试这样做时,会得到一个模板错误吗?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (42)

我正在使用ASP.NETMVC 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;         
        }
    }

我得到了这个错误

模板只能用于字段访问、属性访问、一维数组索引或单参数自定义索引器表达式。描述:在执行当前Web请求时发生了未处理的异常。请查看堆栈跟踪,以获得有关错误的更多信息,以及该错误起源于代码的位置。 异常详细信息:System.InvalidOperationException:模板只能用于字段访问、属性访问、一维数组索引或单参数自定义索引器表达式。

提问于
用户回答回答于

应该是这样的:

@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())
用户回答回答于

有一个过载可以帮助实现这一点,同时保持它的强类型。

// 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)

扫码关注云+社区