是否可以从代码后面向Bind()传递一个格式字符串
本文关键字:字符串 格式 一个 Bind 代码 是否 | 更新日期: 2023-09-27 18:16:09
- 网络表单,.NET 4.51
使用标准数据绑定如下:
<asp:TextBox TabIndex="254" Text='<%# Bind("ClientTwoDateOfBirth", "{0:yyyy-MM-dd}") %>' ID="txtClientTwoDob" runat="server"></asp:TextBox>
是否可以调用后台代码来动态获取格式化字符串?类似以下内容(不起作用(:
<asp:TextBox TabIndex="254" Text='<%# Bind("ClientTwoDateOfBirth", "{" + GetFormatStringFromCodeBehind() + "}") %>' ID="txtClientTwoDob" runat="server"></asp:TextBox>
有人能给我指正确的方向吗?
您可以通过从代码后面获得文本框所需的FormatString
aspx
<asp:TextBox ID="TextBox1" runat="server" Text='<%# GetFormatStringFromCodeBehind( Eval("columnName")) %>'></asp:TextBox>
aspx.cs
public string GetFormatStringFromCodeBehind(object obj)
{
return Convert.ToDateTime(obj).ToString("dd/MM/yyy");
}
您应该使用Eval而不是Bind
Bind()
表达式中不可能有比纯字符串更复杂的内容。甚至有一个关于这方面的错误报告(几乎与您的问题相同(-带有"绑定"和格式问题的数据绑定(ASP.Net(和官方回应:
由微软发布于2009年1月22日上午7:23
你所看到的行为是故意的。Bind表达式是ASP.NET代码生成的非常专业的部分,它有format参数必须是文字的限制失败,因为格式字符串是一个函数。你可以阅读有关Bind的详细信息,请点击此处:http://weblogs.asp.net/leftslipper/archive/2007/06/29/how-asp-net-databinding-deals-with-eval-and-bind-statements.aspx.
我通常使用DataBinder.Eval在PreRender中获取TextBox的值并进行设置。您可以添加一个条件来检查您是否处于编辑模式。
参见下面的示例代码:
在您的.aspx中:
<asp:TextBox OnPreRender="txtClientTwoDob_PreRender" TabIndex="254" Text='<%# Bind("ClientTwoDateOfBirth") %>' ID="txtClientTwoDob" runat="server"></asp:TextBox>
在你的代码后面:
protected void txtClientTwoDob_PreRender(object sender, EventArgs e)
{
TextBox txtClientTwoDob = (TextBox)sender;
//You can check also if you are in edit mode or not before performing this
txtClientTwoDob.Text = DataBinder.Eval(txtClientTwoDob, "Text", "{0:yyyy-MM-dd}");
}
我希望这能有所帮助。