是否可以使用带有TextBoxFor HTML帮助程序的lambda表达式在编辑表单内部使用String.Format进行内联格式化?
这样的事情,但这显然失败了,但希望你会得到我的意思
<%: Html.TextBoxFor(String.Format("{0:d}", model => model.IssueDate), new { @class= "invoiceDate"}) %>
答案 0 :(得分:4)
显然我完全错过了EditorFor助手(并且还有DisplayFor助手,与EditorFor助手一样)。
您可以使用强类型的EditorFor helper访问模型,如下所示:
<%: Html.EditorFor(model => model.ServiceDate) %>
然后在Views / Shared /文件夹中创建一个名为EditorTemplates的子文件夹,并使用以下内容在其中创建DateTime.ascx:
<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<DateTime>" %>
<%: Html.TextBox("", Model.ToShortDateString(), new { @class= "editDate"}) %>
这允许我们使用强类型助手,但也使用属性类型的格式。
答案 1 :(得分:1)
Html.TextBoxFor
需要一个委托,但是当String.Format
传递给委托时,您传递的是调用String.Format
的结果。
您需要将来自String.Format
(或更简单,ToString
)的电话放在委托中:
<%: Html.TextBoxFor(model => model.IssueDate.ToString("d"), new { @class= "invoiceDate"}) %>
但正如你在评论中所说:
给出此异常“模板只能用于字段访问,属性访问,单维数组索引或单参数自定义索引器表达式。”
这是因为Html.TextBoxFor
期待Expression<T>
并解码,以提取您正在访问的属性/方法/字段。然后,它将使用此信息以便以后直接访问该成员。
您可以使用Html.TextBox
,也可以在包含格式的模型类型中添加属性。
答案 2 :(得分:-1)
如果是这种情况,请使用TextBox而不是TextBoxFor
与@Html.TextBox("IssueDate",Model.IssueDate.Value.ToLongDateString())
一样
要么
@Html.TextBox("IssueDate",Model.IssueDate.Value.ToString("dd MM yyyy"))