具有For helpers的lambda表达式中的String.Format

时间:2010-09-16 10:26:10

标签: asp.net asp.net-mvc asp.net-mvc-2

是否可以使用带有TextBoxFor HTML帮助程序的lambda表达式在编辑表单内部使用String.Format进行内联格式化?

这样的事情,但这显然失败了,但希望你会得到我的意思

<%: Html.TextBoxFor(String.Format("{0:d}", model => model.IssueDate), new { @class= "invoiceDate"}) %>

3 个答案:

答案 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"))