我可以创建运行代码隐藏方法的自定义属性吗?

时间:2018-04-26 22:08:04

标签: c# asp.net .net webforms

我在onkeyup上为Page_Load添加了TextBox个属性。我有它,所以它能够运行JavaScript函数。我想知道我是否可以更改它以在代码隐藏文件中运行方法。我尝试了this.methodname,但它要求输入一个字符串作为参数。

问题TextBox

<asp:TextBox ID="txtCurrBlk" runat="server" onkeyup="txtUpdate()"
     style="width:80px" Text='<%#Eval("currentBlack") %>'
     AutoPostBack="true" />

在此C#文件中的page_load下:

txtCurrBlkTotal.Attributes.Add("onKeyUp", "CallScript(this)");

我想在文件后面的相同代码中运行的函数:

protected void keypressUpdateTotals()
{
    readingTextChanged();
    updateTotals();
}

所以onkeyup目前会运行我设置的任何JavaScript函数,但是我需要在代码隐藏中运行一个方法。

1 个答案:

答案 0 :(得分:0)

TextBox控件只有服务器端TextChanged事件,您无法轻松制作&#34; custom&#34;服务器端事件。但是,您可以通过调用CallScript()函数让您的JavaScript _postback()函数回发到服务器。

OnTextChanged属性添加到TextBox控件中(我建议同时删除AutoPostBack属性,但这取决于您):

<asp:TextBox ID="txtCurrBlkTotal" runat="server"
             onkeyup="CallScript(this)"
             OnTextChanged="txtCurrBlk_TextChanged" />

我已在此处直接添加了onkeyup,但如果您愿意,可以使用txtCurrBlkTotal.Attributes.Add("onKeyUp", "CallScript(this)");

现在,在CallScript()函数的末尾,为您的_postback()控件调用TextBox函数:

function CallScript(sender) {
    //...
    __doPostBack("<%= txtCurrBlkTotal.ClientID %>", "");
}

每次触发onKeyUp事件时,都会回发到服务器。您可以在TextChanged事件中捕获并处理该事件:

protected void txtCurrBlkTotal_TextChanged(object sender, EventArgs e) {
    keypressUpdateTotals();
}

或者,您可以让JavaScript CallScript()函数对代码隐藏keypressUpdateTotals()函数进行Ajax调用。我认为这是一个更好的解决方案,但你可以自己决定。