问题 通过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'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;

仍然给我一个空值。


13080
2018-01-23 16:13


起源

是否 #txtSite 有一个 name 属性? - Austin Brunkhorst
@AustinBrunkhorst,它需要一个名字属性吗?我有一个 ID 为了它。会试一试。 - Neil Knight
@ kad1r:这不是我发布的JQuery。 JQuery帖子从数据库中获取值并填充文本框。它正确地填充文本框,但是当我使用CSharp代码保存数据时, TextBox.Text 财产是空的。 - Neil Knight
你说你在干嘛 TextBox.Text。向我们展示您的所有代码。 - crush
呃,等等,你发布的代码不相关。向我们展示提交表单的代码。我怀疑这是VIEWSTATE没有返回服务器的问题。 - crush


答案:


您已将文本框设置为 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('');
    }
}

16
2018-01-24 14:39



我确实尝试将字段设置为 ReadOnly 但那仍然失败了。我实施了 HiddenField 解决方案昨天早上作为解决方法。 - Neil Knight


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


0
2018-01-23 18:12



这是有道理的,但它不起作用。 - Neil Knight
哼。我将要求您分享您的.aspx文件代码(主要关注的部分)以及后端c#代码完整功能,以便我们可以以一种好的方式进行审核。谢谢。 - Rana