是否可以从代码后面向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>

有人能给我指正确的方向吗?

是否可以从代码后面向Bind()传递一个格式字符串

您可以通过从代码后面获得文本框所需的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}");
    }

我希望这能有所帮助。