我通过ajax文章设置一个TextBox控件的值.
$('#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's 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;
仍然给我一个空值.
解决方法
您的文本框设置为Enabled =“false”,它在浏览器中显示为disabled =“disabled”.
Disabled form inputs are not submitted.
解决方案是使文本框启用和只读:
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('');
}
}