【问题标题】:LinqDataSource and DateTime FormatLinqDataSource 和 DateTime 格式
【发布时间】:2010-10-29 06:40:47
【问题描述】:

我正在尝试创建一个 LinqDataSource 以绑定到 ASP.NET 表单中的 DropDownList。我只想根据日期(这是数据库中的字段之一)显示元素。

基本上,我要展示的元素是将来会发生的元素(即在 DateTime.Now 之后)。

我正在尝试以下标记:

<asp:DropDownList runat="server" ID="DropDownList1" 
    AppendDataBoundItems="True" DataSourceID="LinqDataSource1"
    DataTextField="TextField" DataValueField="ValueField">
</asp:DropDownList>
<asp:LinqDataSource ID="LinqDataSource1" runat="server" 
    ContextTypeName="DataContext1" TableName="Table" 
    Where="DateField &gt;= @DateField">
    <WhereParameters>
        <asp:Parameter DefaultValue="DateTime.Now" Name="DateField" 
            Type="DateTime" />
    </WhereParameters>
</asp:LinqDataSource>

当我尝试运行它时,我收到一个格式异常,提示“该字符串未被识别为有效的 DateTime”。但是,我数据库中的日期似乎很好,因为 DateTime.Parse 可以完美地处理它们。 DateField 是 SQL 中的 datetime 类型。

我在这里错过了什么?

谢谢!

【问题讨论】:

    标签: asp.net sql linq linq-to-sql


    【解决方案1】:

    DefaultValue 是其他人建议的代码有问题。

    但是,将DefaultValue 设置为

     "<%# DateTime.Now %>"
    

    就像 Andomar 建议的那样(这会使标记看起来像这样:

    <WhereParameters>
                    <asp:Parameter DefaultValue="<%# DateTime.Now %>" Name="DateField" Type="DateTime" />
    </WhereParameters>
    

    也不起作用,因为只有具有 DataBinding 事件的对象才支持 DataBinding 表达式,而 ParameterControlParameter 都没有。

    对于字符串,创建 TextBox 或 Label 并将 表达式放入该新字段的值中相当容易(更多详细信息here),但使用 DateTime 会更复杂一些值,因为将 SQL DateTime 与 .NET DateTime 进行比较会导致异常。

    使用 Page_Load 事件可以很容易地做到这一点

    DataContext DataContext1 = new DataContext();
    
        var c = from a in DataContext1.Field
                where a.DateField >= DateTime.Now
                select a;
        DropDownList.DataSource = c;
        DropDownList.DataBind();
    

    【讨论】:

      【解决方案2】:

      我怀疑它在 DefaultValue 上失败了。

      【讨论】:

        【解决方案3】:

        试试:

        DefaultValue="<%# DateTime.Now %>"
        

        【讨论】:

        • 把我引向正确的方向。但是,您不能在参数上使用表达式。有关详细信息,请参阅我的答案。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多