【问题标题】:MVC 3 - Change Html.TextBox to Html.TextBoxForMVC 3 - 将 Html.TextBox 更改为 Html.TextBoxFor
【发布时间】:2011-10-21 01:00:40
【问题描述】:

我将 html.textbox 用于我的 2 个日期时间字段,因为我需要将它们格式化为特定格式,但我不知道如何通过 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)

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

【问题讨论】:

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


    【解决方案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?
    

    【讨论】:

    • 嗨,非常感谢,但实际上我以前使用过 editorfor。但是,我需要对每个 datetime 字段 datepicker 做一些不同的设置,所以我用不同的 id 分隔它。顺便说一句,我还注意到我真的不需要 textboxfor 来进行验证!
    猜你喜欢
    • 2011-08-19
    • 1970-01-01
    • 2014-08-08
    • 1970-01-01
    • 2021-04-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-13
    相关资源
    最近更新 更多