Asp.net 绑定文本框时如何调用方法

Asp.net 绑定文本框时如何调用方法,asp.net,Asp.net,我想在EditItemTemplate中绑定一个TextBox(),但我需要在显示TextBox之前将其原始值传递给函数。我的目标是在显示之前格式化值。这是一个复杂的格式化规则,所以我不能使用任何内置的格式化程序。使用Eval()很容易,但使用Bind()则是另一回事。我知道可以使用代码隐藏中的事件来完成,但我试图从aspx页面完成这一切 例如: <EditItemTemplate> <asp:TextBox ID="NameTextBox" Text=<

我想在EditItemTemplate中绑定一个TextBox(),但我需要在显示TextBox之前将其原始值传递给函数。我的目标是在显示之前格式化值。这是一个复杂的格式化规则,所以我不能使用任何内置的格式化程序。使用Eval()很容易,但使用Bind()则是另一回事。我知道可以使用代码隐藏中的事件来完成,但我试图从aspx页面完成这一切

例如:

<EditItemTemplate>
        <asp:TextBox ID="NameTextBox" Text=<%# Bind("Name") %> MaxLength="255" runat="server" />
</EditItemTemplate>


谢谢…

像这样的东西应该很接近你要找的东西:

<asp:TextBox Id="TextBox1" runat="server" Text='<%# FormatValue(Eval("Name"), Container.DisplayItemIndex) %>' />

不能从标记中执行此操作。ASP.NET有一个特殊的案例代码来解析
Bind
语法并为其生成特殊代码。这就是为什么双向数据绑定只支持
Bind()
。你可以在Eilon Lipton的文章中找到更多关于这方面的信息:

令许多读者惊讶的是,ASP.NET中没有绑定方法! 当ASP.NET解析您的文件并看到您正在使用数据绑定时 表达式(以角括号百分比磅格式,
)表示) 为
Bind
语法分析特殊的案例代码,并生成一些 它的特殊代码。当您使用
时,它不是真正的 函数调用。如果ASP.NET解析代码并检测到
Bind()
语句,它将语句分为两部分。第一部分是 单向数据绑定部分,最终只是一个常规数据绑定部分
Eval()
调用。第二部分是相反的部分,即 通常,一些代码是沿着
“string name=TextBox1.Text”
这将从绑定的位置获取值

Non-Bind()数据绑定语句是文字代码(我们使用
CodeDom
中的
codesippetexpressions
),因此该语言中的任意代码 你的选择是允许的。但是,由于ASP.NET必须解析
Bind()
语句,双向数据绑定不支持任何其他功能 而不是
Bind()
。例如,以下语法无效,因为它 尝试调用任意代码并同时使用
Bind()
双向数据绑定支持的唯一格式是
Bind(“字段”)
Bind(“字段”,“格式字符串{0}”)


这样,考虑在代码后面做这个,或者使用<代码> EVA/COD>方法代替。

我想你缺少单引号了。code>Text=''@MilkyWayJoe,在这种情况下我从不使用引号,这是合法的。它减少了混乱。你为什么不想使用事件?@rs,我会使用事件,但我总是尝试在可能的时候找到快捷方式。与rs相同的注释。。。你不能在函数调用的上下文中使用Bind。我希望Bind()的另一种语法可以让我像Eval()一样使用它,特别是因为在幕后它是Eval()。
public object FormatValue(object value, int itemIndex)
{
    var input = GridView1.Rows[itemIndex].FindControl("TextBox1") as TextBox;
    if (input != null)
    {
        //do whatever you need with the old value
        var oldValue = input.Text.Trim();
    }

    //format the value and send it back
    return string.Format("My name is {0}", value);
}