我正在使用asp.net MVC3,我一直收到这个错误,我不理解它,因为我没有使用模板。
在我的局部视图中有这个
@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:模板只能与字段访问、属性访问、一维数组索引或单参数自定义索引器表达式一起使用。
发布于 2011-02-04 06:09:02
应该是这样的:
@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())
发布于 2015-03-20 09:28:34
有一个重载可以帮助实现这一点,同时保持它的强类型。
// 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)
发布于 2011-02-04 06:10:10
你得到这个错误是因为.TextBoxFor()
html helper使用了一个内置的模板(一个用于字符串输入的文本框),而你给了它一个过于复杂的lambda表达式(即不属于消息中列出的类型集)。
要解决此问题,请将要编辑的属性的类型更改为string
,以便MVC可以使用默认的字符串模板,或者让MVC使用默认的日期时间模板。我推荐后者:
@Html.TextBoxFor(m => m.Due)
如果你对用户编辑日期的方式不满意,可以在构建编辑器的~/Views/Shared/EditorTemplates中放置一个名为"DateTime.cshtml“的局部视图,这样它就可以按照你想要的方式工作了。
https://stackoverflow.com/questions/4892248
复制相似问题