Подтвердить что ты не робот

Установка значения текстового поля в JQuery

Я устанавливаю значение TextBox элементов управления через пост ajax.

$('#txtSite').val(msg.d.SiteName);

Это работает, и значение TextBox изменяется правильно. Но, когда я прихожу к отправке информации в базу данных, значение txtSite.Text пусто!

Любые идеи? Я сошел с ума?

Код для заполнения TextBox:

$.ajax({
    type:"POST",
    url: "MyPage.aspx/ValidateSite",
    data: "{ siteID: '" + $('#txtSiteID').val() + "' }",
    contentType: "application/json; charset=utf-8",
    dataType: "json",
    success: function(msg) {
        if (msg.d != null) {
            $('#txtSite').val(msg.d.SiteName);  // It definitely doing this
        }
        else {
            $('#txtSite').val('');
        }
    },
    error: function(msg) {
    }
});

Код для сохранения на сервере (все подключения и т.д. правильны и работают). Этот код находится в событии нажатия кнопки ASP:

SqlCommand cmd = new SqlCommand("INSERT INTO [Sites] ([SiteName]) VALUES ('" + txtSite.Text + "')", conn);
cmd.ExecuteNonQuery();

TextBox определяется следующим образом:

<asp:TextBox ID="txtSite" runat="server" AutoComplete="off" TabIndex="4" MaxLength="50" Style="width: 230px" Enabled="false" CssClass="FormDisabledTextWithSmallHeight" />

Я также попытался изменить свой JQuery, чтобы вместо этого использовать простой Javascript:

document.getElementById("txtSite").value = msg.d.SiteName;

По-прежнему возвращает мне пустое значение.

4b9b3361

Ответ 1

У вас установлено текстовое поле Enabled="false", которое отображается в браузере с помощью disabled="disabled". Отключенные входы формы не отправляются.

Решение состоит в том, чтобы сделать текстовое поле включенным и доступным только для чтения:

txtSite.Enabled = true;
txtSite.Attributes.Add("readonly", "readonly"); //on prerender event or somewhere else

или использовать другой набор элементов с runat="server", например, <asp:HiddenField /> и обновить текстовое поле и альтернативный элемент с помощью вашего вызова AJAX:

success: function(msg) {
    if (msg.d != null) {
        $('#txtSite').val(msg.d.SiteName);
        $('#hiddenInput').val(msg.d.SiteName);
    } else {
            $('#txtSite').val('');
    }
}

Ответ 2

Да, я определенно думаю, ваше текстовое поле должно иметь атрибут имени в html-коде, проверьте его. Без атрибута "name" браузер не будет размещать эти данные ввода на сервере и, следовательно, вы не получите его на стороне сервера С#. Надеюсь, это имеет смысл.