如何在ASP控件上为动态生成的TextBox添加JavaScript事件处理程序

时间:2018-05-24 17:18:34

标签: javascript c# asp.net event-listener

我们有条件将TextBoxs动态添加到ASP用户控件,如下所示:

if (conditionIsTrue) {
    TextBox textField = new TextBox();
    Panel.controls.Add(textField);
}

我想添加一个事件监听器,当用户解开或编辑TextBox时,它会填充TextBox值。

我尝试了以下C#实现,但由于某种原因,侦听器没有处理这些值。

if (conditionIsTrue) {
    TextBox textField = new TextBox();
    textField.TextChanged += new EventHandler(LeadingZero_Handler);
    Panel.controls.Add(textField)
}

public void LeadingZero_Handler(object sender, EventArgs e)
{
    int FieldLength = 10;
    if((TextBox)sender.Text.Length < FieldLength)
    {
        (TextBox)sender.Text = (TextBox).sender.Text.PadLeft(FieldLength,'0');
    }
}

是否有一种方法可以在ASP控件上用JavaScript实现事件监听器,但是在C#代码中动态生成TextBox期间/之间添加JavaScript监听器属性?

1 个答案:

答案 0 :(得分:1)

将此添加到后面的代码中。

textField.AutoPostBack = true;

但是,如果你所做的只是添加一些零填充,而你在LeadingZero_Handler中没有做任何其他事情,我建议采用前端方法。这样可以省去PostBack。

<script type="text/javascript">
    function LeadingZero(element) {
        var str = element.value;
        var padding = "0000000000";
        if (str.length < 10) {
            element.value = padding.substring(0, padding.length - str.length) + str;
        }
    }
</script>

然后将脚本添加到TextBox而不是AutoPostBack和TextChanged处理程序。

textField.Attributes.Add("onblur", "LeadingZero(this)");