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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了我可以创建一个运行代码隐藏方法的自定义属性吗?相关的知识,希望对你有一定的参考价值。

我在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函数,但我需要它在代码隐藏中运行一个方法。

答案

TextBox控件只有服务器端TextChanged事件,你不能轻易地做出“自定义”服务器端事件。但是,您可以通过调用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调用。我认为这是一个更好的解决方案,但你可以自己决定。

以上是关于我可以创建一个运行代码隐藏方法的自定义属性吗?的主要内容,如果未能解决你的问题,请参考以下文章

ServiceStack.OrmLite:索引的自定义命名可以在代码中完成吗?

隐藏另一个类的自定义按钮

通过自定义布局更新隐藏某些类别的“颜色”属性商店

调用 reloadSections:withRowAnimation 后,使用 IB 创建的自定义单元格被隐藏:

从代码绑定到 WinRT/UWP 中的自定义附加属性

使用数据注释和代码的自定义验证属性