Могу ли я создать собственный атрибут, который запускает метод codebehind? - PullRequest
0 голосов
/ 27 апреля 2018

Я добавил атрибут onkeyup на Page_Load для TextBox. У меня так, чтобы он мог нормально запускать функцию JavaScript. Мне было интересно, могу ли я изменить его, чтобы запустить метод в файле с выделенным кодом. Я попытался this.methodname, но он запрашивает строку в качестве параметра.

TextBox в вопросе:

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

Под page_load в этом файле C #:

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

Функция, которую я хочу запустить в том же коде за файлом:

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

Таким образом, onkeyup в настоящее время будет запускать любую функцию JavaScript, которую я установил, но мне нужно, чтобы она вместо этого запускала метод внутри кода.

1 Ответ

0 голосов
/ 27 апреля 2018

Элемент управления TextBox имеет только событие TextChanged на стороне сервера, и вы не можете легко создать "пользовательское" событие на стороне сервера. Тем не менее, вы можете позволить вашей функции JavaScript CallScript() выполнять обратную передачу на сервер, вызывая функцию _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() выполняла Ajax-вызов вашей функции keypressUpdateTotals() с выделенным кодом. Я думаю, что это лучшее решение, но вы можете решить для себя.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...