13

我正在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'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;

仍然返回一个空值。

4

2 回答 2

21

您将文本框设置为Enabled="false"在浏览器中使用disabled="disabled". 不提交禁用的表单输入。

解决方案是使文本框启用并只读:

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

或使用不同的元素集runat="server",如 a<asp:HiddenField />并使用您的 AJAX 调用更新文本框和备用元素:

success: function(msg) {
    if (msg.d != null) {
        $('#txtSite').val(msg.d.SiteName);
        $('#hiddenInput').val(msg.d.SiteName);
    } else {
            $('#txtSite').val('');
    }
}
于 2013-01-24T14:39:17.267 回答
0

是的,我绝对认为,你的文本框应该在 html 代码中有一个 name 属性,检查一下。如果没有“名称”属性,浏览器不会将此输入框的数据发布到服务器,因此您不会在服务器端 c# 代码中获取它。希望,这是有道理的..

于 2013-01-23T18:12:31.060 回答