我如何使用TextBoxFor
作为可空类型,在我的情况下DateTime?
<%:Html.TextBoxFor(m => m.LeaseDate.Value.ToShortDateString(), new { @class = "def-text-input datetime-input" })%>
我试试这个,但得到错误:
异常详细信息:System.InvalidOperationException:模板可以 仅用于字段访问,属性访问,单维数组 索引或单参数自定义索引器表达式。
答案 0 :(得分:1)
您可以使用Html.EditorFor
<%:Html.EditorFor(m => m.LeaseDate, "Date")%>
请注意参数“Date”。这是对EditorTemplate(通常位于“Views / Shared / EditorTemplate”文件夹中的用户控件)的引用。如果不存在,请创建usercontrol / file自己的“Date.ascx”
现在,EditorFor方法将此控件用作模板。一个地方可以控制使用此模板的所有日期字段!
UserControl“Date.ascx”
的示例<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl" %>
<%
ViewDataDictionary attributes = ViewData;
attributes.Add("class", "def-text-input datetime-input");
%>
<%= Html.TextBox(string.Empty, string.Format("{0:d-M-yyyy}", Model), attributes) %>
答案 1 :(得分:0)
TextBoxFor
应该用于ViewModel上的属性:
<%:Html.TextBoxFor(m => m.LeaseDate, new { @class = "def-text-input datetime-input" })%>
如果您想格式化日期,可以使用ViewModel上DataFormatString
属性的DisplayFormat
属性:
[DisplayFormat(ApplyFormatInEditMode = true, DataFormatString = "{0:MM/dd/yyyy}")]
public DateTime LeaseDate { get; set; }
答案 2 :(得分:0)
正如其他人所说,你可以在模型上进行格式化
[DisplayFormat(DataFormatString = "{0:MM/dd/yy}", ApplyFormatInEditMode = true)]
public DateTime LeaseDate { get; set; }
然后致电
@Html.TextBoxFor(x => x.LeaseDate)
你的观点
但另一方面,如果你想在视图上坚持格式化,你可以使用
@Html.TextBox("LeaseDate", Model.LeaseDate.ToShortDateString())
快乐编码
答案 3 :(得分:-1)
模型:
[DisplayFormat(DataFormatString = "{0:MM/dd/yy}", ApplyFormatInEditMode= true]
DateTime? dateAssign { get; set; }
视图:
@Html.TextBoxFor(model => model.myObject.dateAssign)