0

我已经无情地在网上搜索这个并且没有找到任何东西 - 这令人惊讶,因为我认为这是一个如此普遍的情况!

基本上,在我的模型上,我有一个DateTime希望用户通过表单填充的字段。我正在使用 Html 帮助器来呈现表单的所有其他部分(以及验证)

所以这个问题分为两部分......

html 助手

首先,有什么方法可以使用 Html 帮助器将DateTime字段拆分为日期的三个组成部分:日、月、年(因为我不关心时间部分)。这可以呈现为文本框、下拉列表或两者的组合。

模型绑定

然后在发布表单时,将备份绑定到模型的最佳方法是什么?我已经看到了Scott Hanselmann对此的解决方案,但对于我需要的东西来说似乎有点臃肿 - 我希望有一个更优雅的解决方案。是否建议扩展DefaultModelBinder并将其设置为默认活页夹(因为所有日期都将以这种方式处理)或编写一个实现IModelBionder并将其设置为该类型的默认活页夹的DateTime类?

感谢您提前提供的所有帮助 :-) 我很喜欢 MVC,但让我很生气的是,如此微不足道的事情却引起了如此多的头痛!

4

1 回答 1

1

认为我已经为此制定了一个不错的解决方案,因此我将为将来偶然发现此问题的任何人提供答案!

关于 Html 助手,我不知何故完全忽略了创建扩展方法!所以最终当我想到时,我写了一个扩展方法,它基本上调用 Html 助手的其他方法来提供三个字段(是否使用下拉文本输入是你的选择)

    public static string DateTime(this HtmlHelper helper, string name)
    {
        StringBuilder builder = new StringBuilder();
        string dayName = name + ".Day";
        string monthName = name + ".Month";
        string yearName = name + ".Year";

        builder.Append(helper.TextBox(dayName));
        builder.Append(helper.DropDownList(monthName, typeof (Months)));
        builder.Append(helper.TextBox(yearName));

        return builder.ToString();
    }

至于表单发布后的绑定,我只是创建了一个实现的类,并将其设置为应用程序启动时IModelBinder的默认DateTime类型。如果需要不同的绑定方法,则可以在控制器操作级别上覆盖它。这本质上是我在问题中链接到的 Scott 活页夹的更简单版本。

目前就像一个魅力(如果有点简单),但我相信它对于任何被这个问题迷惑的人来说已经足够了!

于 2010-05-25T09:54:56.053 回答