Visual studio 2012 使用asp.net 4.5中的新模型绑定格式化日期字段

Visual studio 2012 使用asp.net 4.5中的新模型绑定格式化日期字段,visual-studio-2012,asp.net-4.5,Visual Studio 2012,Asp.net 4.5,在asp.net 4.5之前的旧时代,我们可以轻松地将日期绑定到Gridview、Formview或其他数据绑定控件,并使用简单的格式字符串使其看起来更具代表性 <asp:TextBox ID="DateFieldTextBox" runat="server" Text='<%# Bind("DateField","{0:d}") %>'/>

在asp.net 4.5之前的旧时代,我们可以轻松地将日期绑定到Gridview、Formview或其他数据绑定控件,并使用简单的格式字符串使其看起来更具代表性

            <asp:TextBox 
                ID="DateFieldTextBox" 
                runat="server" 
                Text='<%# Bind("DateField","{0:d}") %>'/>

新的强类型模型绑定要困难一些

            <asp:TextBox 
                ID="DateFieldTextBox" 
                runat="server" 
                Text='<%# BindItem.DateField %>'/>

将工作,但生成完整的日期/时间字符串,而不仅仅是日期

            <asp:TextBox 
                ID="DateFieldTextBox" 
                runat="server" 
                Text='<%# BindItem.DateField.ToShortDateString() %>'/>

。。这应该可以工作,但会产生编译时错误“BindItem的代码语法无效”。Item.DateField.ToShortDateString()可以工作,但不会绑定回发


现在我们已经恢复到旧语法,但是我们希望得到现代编译时检查,但仍然能够很好地格式化日期。以前有人遇到过这种情况吗?

要在网格视图中显示数据,可以执行Item.DateField.ToShortString()操作,因为它是单向数据绑定。i、 e您对记录中的内容不满意。BindItem.DateField.ToDateString()将对象从DateTime转换为字符串,这将导致您已经看到的错误。在编辑字段或输入新条目时,可以在FabelVIEW中使用Bin(表达式、格式)。对于重启该线程,

< P>道歉,但您是否考虑将数据注释添加到模型类中?换言之:

using System.ComponentModel.DataAnnotations;

[DisplayFormat(DataFormatString = "{0:d}", ApplyFormatInEditMode = true)]
public DateTime DateField { get; set; }

这似乎对我有用,尽管我不知道你的具体情况。

我为此挣扎了很长一段时间。我的解决方案是将数据模型中的数据注释与FormView中的DynamicControl结合使用。我假设这是一个WebForms项目,而不是一个MCV项目

读一点关于知识领域的知识。这是MS关于WebForms数据访问/表示控件的一篇更好的文章,其中包括对DynamicControl的引用

//我知道你想要这个,我也想要。它似乎可以/应该起作用,但它不起作用
//这是可行的,但您还需要在模型中使用数据注释。
//对象类中的示例模型注释
[列(TypeName=“date”)、数据类型(DataType.date)、显示格式(DataFormatString=“{0:MM/dd/yyyy}”、ApplyFormatInEditMode=true]
公共日期时间日期字段{get;set;}
我将使用这种模式,因为我需要双向模型绑定,能够以正确的格式显示日期(以及货币等)。非常不幸的是,TextBox控件没有完全处理像这样格式化模型数据。在此上下文中,数据注释被忽略。如果没有格式,双向绑定可以工作,但如果需要格式,双向绑定就不能工作。这似乎是一个不完整的WebForms实现


另一方面,使用DynamicControl是可行的,但是您在编码时无法获得数据字段属性的Intellisense,该属性将为您提供模型的成员。什么????另一个不完整且不太受欢迎的解决方案。

经过两天的努力,我终于找到了一个解决格式化字段值的双向模型绑定问题的解决方案。只需删除文本框属性文本后的单引号或双引号“”。它对我来说就像一个符咒!!但如果到目前为止使用TextBox的TextMode属性,请将其删除。原因是,它不会显示来自服务器或数据库的值。如果您想使用日期选择器或日历,您可以简单地添加一个AJAX CalendarExtender控件来从日历中选择日期

<asp:TextBox ID="DateFieldTextBox" runat="server" Text=<%# Bind("DateField","{0:d}") %>/>


尝试此操作时也不起作用:
'
,它显示:编译器错误消息:CS0103:当前文件中不存在名称“BindItem”context@senthilkumar当前位置你读过这个问题吗?我们需要新模型绑定的替代方案——永远不要使用旧的
Eval
(后期绑定反射),而是
Container.DataItem
string.Format(“{0:d}”,((DataRowView)Container.DataItem)[“DateField]”)
这里的想法对我很有用(在一个重复器中绑定)。使用DisplayFormat注释属性,并使用DynamicControl代替BindItem.Bind。Intellisense也在动态控件中工作,这很好。
<asp:TextBox ID="DateFieldTextBox" runat="server" Text=<%# Bind("DateField","{0:d}") %>/>