是否可以从后面的代码传递格式字符串到Bind()?

时间:2014-08-04 05:17:55

标签: c# asp.net webforms

  • Webforms,.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>

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

3 个答案:

答案 0 :(得分:0)

您可以通过

后面的代码获取文本框所需的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

答案 1 :(得分:0)

Bind()表达式中,不可能有比普通字符串更复杂的东西。甚至有关于此的错误报告(几乎与您的问题相同) - Data Binding with "Bind" and Formatting Problem (ASP.Net)和官方回复:

  

Microsoft于2009年1月22日上午7:23发布

     

您所看到的行为是设计上的。 Bind表达式是一个   ASP.NET代码生成的非常专业的部分,它有一个   您可以采样格式参数必须是文字的限制   失败,因为格式字符串是一个函数。你可以阅读   更多关于Bind的详细信息:   http://weblogs.asp.net/leftslipper/archive/2007/06/29/how-asp-net-databinding-deals-with-eval-and-bind-statements.aspx

答案 2 :(得分:0)

我通常使用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}");
    }

我希望这会有所帮助。