Установка значения текстового поля в 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;
По-прежнему возвращает мне пустое значение.
Ответы
Ответ 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" браузер не будет размещать эти данные ввода на сервере и, следовательно, вы не получите его на стороне сервера С#. Надеюсь, это имеет смысл.