【问题标题】:Setting a textbox value by JQuery通过 JQuery 设置文本框值
【发布时间】:2013-01-23 16:13:48
【问题描述】:

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

仍然返回一个空值。

【问题讨论】:

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

标签: jquery asp.net


【解决方案1】:

您的文本框设置为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" 设置的不同元素,例如 &lt;asp:HiddenField /&gt;,并使用您的 AJAX 调用更新文本框和备用元素:

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

【讨论】:

  • 我确实尝试将字段设置为ReadOnly,但仍然失败。我昨天早上实施了HiddenField 解决方案作为解决方法。
【解决方案2】:

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

【讨论】:

  • 嗯。我会要求您分享您的 .aspx 文件代码(主要关注的部分)以及后端 c# 代码完整功能,以便我们能够以良好的方式审查。谢谢。
猜你喜欢
  • 1970-01-01
  • 2011-01-30
  • 1970-01-01
  • 1970-01-01
  • 2011-08-23
  • 2013-07-07
  • 2013-02-24
  • 2014-06-03
  • 1970-01-01
相关资源
最近更新 更多