【发布时间】:2014-01-16 19:15:07
【问题描述】:
我只是在搜索现有问题后无法找到解决方案。
基本上,我有一个启用了编辑的详细信息视图。它绑定到 LINQDataSource。其中一个字段是 SQL 时间,它作为 TimeSpan 进入 ASP.NET。我想要一个双向绑定。为了我的目的,我已经有了在 String 和 TimeSpan 之间转换的函数。
但这是我的难题。我觉得我需要一个 Text= 表达式来在编辑开始时填充文本框,
<EditItemTemplate>
<asp:TextBox ID="TextBox1" runat="server" Text='<%# TimeSpanToString(Eval("Time")) %>'></asp:TextBox>
</EditItemTemplate>
但同时,一个不同的 Text= 表达式指定 TimeSpan 值以在更新时写回数据库;像这样:
<EditItemTemplate>
<asp:TextBox ID="TextBox1" runat="server" Text='<%# Bind("Time", StringToTimespan(TextBox1.Text) %>'></asp:TextBox>
</EditItemTemplate>
如您所见,我非常不确定首先在 Eval 和 Bind 表达式中使用的语法,但希望我已经成功地解释了我的问题。只能有一个 Text= 表达式,因此显然需要在此处进行一些完全不同的操作,以允许在数据绑定和更新期间进行两次转换。
谢谢! 桑德拉
尝试来自@jadarnel23 的解决方案:
对于 ItemTemplate,TimeSpanToTimeString(Eval("Time")) 完美运行。而且 ItemUpdating 功能也可以完美运行 - 用户可以输入例如下午 1:30,它被接受了。
剩下的唯一问题是 EditTemplate。
Bind("Time") 有效,但不会为用户提供格式良好的时间。
TimeSpanToString(Eval("Time")) 不起作用,正如您所说,因为它不会创建要在 ItemUpdating 中使用的 NewValues 条目。
应该是赢家的那个,TimeSpanToString(Bind("Time")),实际上在绑定时抛出了一个错误“编译器错误消息:BC30451:'Bind'未声明。由于它的保护,它可能无法访问等级。”看起来我需要详细说明 Bind 以便我的函数可以看到它,但是如何?谢谢,这真的很接近!
【问题讨论】:
标签: asp.net data-binding timespan