MVC 3 - 将Html.TextBox更改为Html.TextBoxFor

时间:2011-10-21 01:00:40

标签: asp.net-mvc-3 validation html-helper

我在我的datetime字段中使用html.textbox,因为我需要以特定格式格式化它们,但我不知道如何通过html.textboxfor来完成它。 但是,我意识到我需要在我的模型类中使用textboxfor进行验证:

  [Required(ErrorMessage = "Storage Date is required")]
  [DataType(DataType.DateTime, ErrorMessage = "Please input a valid date")]
  public DateTime StorageDate { get; set; }

任何想法如何将我下面的Html.Textbox更改为Html.TextBoxFor并使用相同的设置?

  @Html.TextBox("expirydate", String.Format("{0:ddd, d MMM yyyy}", DateTime.Now), new { id = "expirydate" })
    @Html.ValidationMessageFor(model => model.ExpiryDate)

感谢任何帮助...谢谢...

1 个答案:

答案 0 :(得分:1)

您并非需要使用TextBoxFor()进行验证。如果TextBox与模型中的字段具有相同的ID,则模型绑定器将拾取它。如果您正在谈论获得不显眼的验证功能,您可以随时手动将data- *属性添加到TextBox。

然而,在这种情况下,使用EditorFor()听起来像你真正想要的是自定义编辑器。这是一个更多的工作,但它将允许您通过给用户类似日期/时间选择器控件实际执行日期/时间格式。基本思路是:

  • 创建一个名为DateTime.cshtml的局部视图,该视图绑定到Nullable<DateTime>类型的模型,并将其放入Shared/EditorTemplates视图文件夹中。
  • 使用jQuery和jQueryUI将一个样式为日期/时间选择器的HTML文本框放入局部视图中。
  • 使用[DataType(DataType.DateTime)]属性
  • 在您的模型上装饰属性
  • 使用Html.EditorFor(model => model.WhateverProperty)

幸运的是,日期/时间选择器可能是最流行的自定义MVC3编辑器,所以有很多例子可供选择;来自this question的代码工作正常,只需确保在答案中注明建议并在局部视图中替换此行:

@inherits System.Web.Mvc.WebViewPage<System.DateTime>

用这个:

@model System.DateTime?