如何让我的模板尊重元标记?

时间:2011-02-05 00:08:13

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

我试图覆盖DateTime模板,因为我需要自定义类名。

所以我在edittemplates / datetime.cshtml

中有这个
@model System.DateTime

@Html.TextBox("", Model, new { @class = "date-picker" })

//在我的视图模型中

  [DataType(DataType.Date)]
  public DateTime Date { get; set; }

所以我不知道如何使用我的元标记并仅使用日期。是的我可以硬编码并拥有Mode.ToShortDate()但也许我会想要ToLongdate()一次。

修改

我认为人们感到困惑。首先忽略我刚把它扔进他们的类名,以显示我为什么要覆盖默认的日期时间。

对我来说,硬编码这些类名对我来说似乎不是一个解决方案,而且为什么我在努力弄清楚我是否真的想要使用这些模板而只是回到使用textboxfor()。

问题是我必须将“Date”更改为字符串,因为我只想显示“Date”部分。所以现在我必须稍后将字符串转换回日期时间,以便将其插入到我的数据库中。使用模板,我可以将其保留为日期时间并保存转换。

对我而言,认为每个日期时间都需要相同的类名和相同的html属性是很奇怪的。这些editorFor()应该真正采用html属性。

其次我的全部帖子都是这个。

如果我没有覆盖日期时间模板并执行此操作

  [DataType(DataType.Date)]
  public DateTime Date { get; set; }

然后渲染的结果只显示日期部分。现在,如果我覆盖日期时间,那么我可以添加我的自定义内容并执行上面的操作,它将不会尊重元标记并将呈现完整的日期时间。

所以我的问题是如何制作它以便使用元标记?由于不是每个日期字段都只显示日期。如此难以将类似的东西编码到模板中会很愚蠢。

4 个答案:

答案 0 :(得分:0)

我刚重新创建了您的示例,它似乎按预期工作。

在您的视图中,您是否正常绑定Date属性?

@Html.EditorFor(model => model.Date)

如果你有这个,那么它应该按照你的意愿工作。但是,如果它仍然无法工作,那么我只能想到尝试另一件事。在您的模型上添加以下属性;

[UIHint("ToLongDate")]
public DateTime Date { get; set; }

然后在edittemplates文件夹中创建一个名为ToLongDate.cshtml的新PartialView并添加以下行;

@model System.DateTime
@Html.TextBox("", Model.ToLongDateString(), new { @class = "date-picker" })

使用此技术,您可以创建各种日期格式变体,并使每个属性使用不同的属性。

答案 1 :(得分:0)

我认为最简单的方法是使用一个接受额外视图数据的EditorFor()重载。您可以使用该重载将视图数据发送到模板。您可以发送日期格式字符串,然后像这样呈现文本框:

@Html.TextBox("", Model.ToString(ViewData["format"].ToString()), new { @class = "date-picker" })

以下是所有可能的日期格式字符串 http://msdn.microsoft.com/en-us/library/8kb3ddd4.aspx

答案 2 :(得分:0)

答案 3 :(得分:0)

我知道这是一个老帖子,但这可能是你需要的答案。它在您的模型中使用自定义属性,允许您向视图添加html属性

http://aspadvice.com/blogs/kiran/archive/2009/11/29/Adding-html-attributes-support-for-Templates-2D00-ASP.Net-MVC-2.0-Beta_2D00_1.aspx