TextBoxFor for Nullable类型

时间:2014-02-27 13:40:25

标签: c# html model-view-controller html.textboxfor htmlextensions

我如何使用TextBoxFor作为可空类型,在我的情况下DateTime?

<%:Html.TextBoxFor(m => m.LeaseDate.Value.ToShortDateString(), new { @class = "def-text-input datetime-input" })%>

我试试这个,但得到错误:

  

异常详细信息:System.InvalidOperationException:模板可以   仅用于字段访问,属性访问,单维数组   索引或单参数自定义索引器表达式。

4 个答案:

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