Получить функцию C# для запуска, когда больше не фокусируюсь на asp:TextBox

 <div id="pm-search" class="main-box-body-only min-padding clearfix">
                            <div class="searchFormNoBox span12">
                                <span>
                                    <label>App Tracking ID</label>
                                    <asp:TextBox ID="txtAppTrackingID_App" runat="server" Width="100px"  OnTextChanged="txtAppTrackingID_App_TextChanged" AutoPostBack="True"></asp:TextBox>
                                </span>
                                <span>
                                    <label>Old Status</label>
                                    <asp:DropDownList ID="ddlOldStatus_App" runat="server" AutoPostBack = "true" Width="170px">
                                        <asp:ListItem Value="" Selected="True"></asp:ListItem>
                                        <asp:ListItem Value="AWAITING_CONF">AWAITING_CONF</asp:ListItem>
                                        <asp:ListItem Value="AWAITING_DUPLICATE_FILE">AWAITING_DUPLICATE_FILE</asp:ListItem>
                                        <asp:ListItem Value="CANCELLED">CANCELLED</asp:ListItem>
                                        <asp:ListItem Value="COMPLETE">COMPLETE</asp:ListItem>
                                        <asp:ListItem Value="CONFIRM_APPROVED">CONFIRM_APPROVED</asp:ListItem>
                                        <asp:ListItem Value="CONFIRM_REJECTED">CONFIRM_REJECTED</asp:ListItem>
                                        <asp:ListItem Value="COPY_FINISHED">COPY_FINISHED</asp:ListItem>
                                        <asp:ListItem Value="COPY_STARTED">COPY_STARTED</asp:ListItem>
                                        <asp:ListItem Value="DUPLICATE_FILE_APPROVED">DUPLICATE_FILE_APPROVED</asp:ListItem>
                                        <asp:ListItem Value="DUPLICATE_FILE_REJECTED">DUPLICATE_FILE_REJECTED</asp:ListItem>
                                        <asp:ListItem Value="EMAIL_READY">EMAIL_READY</asp:ListItem>
                                        <asp:ListItem Value="EMAIL_COMPLETE">EMAIL_COMPLETE</asp:ListItem>
                                        <asp:ListItem Value="ERROR">ERROR</asp:ListItem>
                                        <asp:ListItem Value="FILE_PROCESSING">FILE_PROCESSING</asp:ListItem>
                                        <asp:ListItem Value="FILE_READY">FILE_READY</asp:ListItem>
                                        <asp:ListItem Value="FILE_RECEIVED">FILE_RECEIVED</asp:ListItem>
                                        <asp:ListItem Value="HOLD">HOLD</asp:ListItem>
                                        <asp:ListItem Value="PROCESSING_APP">PROCESSING_APP</asp:ListItem>
                                        <asp:ListItem Value="PROCESSING_QC">PROCESSING_QC</asp:ListItem>
                                        <asp:ListItem Value="QUICKCHANGE_READY">QUICKCHANGE_READY</asp:ListItem>
                                        <asp:ListItem Value="READY">READY</asp:ListItem>
                                        <asp:ListItem Value="SCHEDULED">SCHEDULED</asp:ListItem>
                                        <asp:ListItem Value="WEBVIEW_READY">WEBVIEW_READY</asp:ListItem>
                                    </asp:DropDownList>
                                </span>

    protected void txtAppTrackingID_App_TextChanged(object sender, EventArgs e)
    {
        applicationTrackingID = txtAppTrackingID_App.Text;
        ApplicationSettings applicationStatus = new ApplicationSettings(appTrackingID);
        appStatus = applicationStatus.StatusCode; // get the full status code name

        ddlOldStatus_App.SelectedValue = appStatus;

    }

Я хочу, чтобы вышеприведенная функция запускалась, когда текстовое поле "txtAppTrackingID_App" больше не является фокусом.

Цель этой функции - выбрать в раскрывающемся меню значение, соответствующее статусу объекта с этим идентификатором.

3 ответа

Помните: текстовое поле в коде вашего сервера имеет дело только с временной конструкцией, которая в конечном итоге будет использоваться для визуализации HTML для работы браузера. Фактическое текстовое поле существует только в браузере, а не на сервере. Единственный способ запуска кода сервера C#, когда происходит такое изменение пользовательского интерфейса, - отправить сообщение обратно на сервер.

В случае, если неясно, это означает, что браузер отправляет новый HTTP-запрос на сервер, уничтожает локальный DOM и ожидает HTTP-ответа, поэтому он создает новый DOM и отображает его на экране. Это означает, что сервер генерирует совершенно новый набор HTML для всей страницы... он не просто запускает эту функцию.

Это действительно то, что вы хотите случиться? В большинстве случаев вы действительно хотите обрабатывать эту работу полностью в javascript.

Добавьте следующее к вашему мнению.

<script type="text/javascript">
    $("#txtAppTrackingID_App").blur(function () {
        $.post("/controller/method" + id);
    });
</script>

Вот как я это сделал в WebForms, и это звучит так, как будто вы на этом пути (используя WebMethod).

Создайте свой WebMethod в PageNameGoesHere.aspx:

[WebMethod]
public static bool DoSomething(int id)
{
  // do something on id
}

Создайте JavaScript, чтобы вызывать его через Ajax (непроверенный для размытия, для моего он был на клике). То, что объективно использует C для события размытия, может быть правильным здесь, не уверен:

$('form').on('blur', '#txtAppTrackingID', function() {
  var data = new Object();
  data['id'] = 12;

  $.ajax({
    url: 'PageNameGoesHere.aspx/DoSomething',
    type: 'POST',
    contentType: 'application/json; charset=utf-8',
    data: JSON.stringify(data),
    success: function (response) {
      // whatever you want to do on success.
    },
    error: function (response) {
      // probably some messaging something went wrong.
    }
  })
});
Другие вопросы по тегам