Neil Knight
Neil Knight

Reputation: 48537

Setting a textbox value by JQuery

I am setting a TextBox controls value via an ajax post.

$('#txtSite').val(msg.d.SiteName);

This is working and the value of the TextBox is altered correctly. But, when I come to posting the information to the database, the txtSite.Text value is empty!!

Any ideas? Am I going mad?

Code to populate the 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) {
    }
});

Code to save to the server (all connectivity etc. is correct and working). This code is in an ASP button click event:

SqlCommand cmd = new SqlCommand("INSERT INTO [Sites] ([SiteName]) VALUES ('" + txtSite.Text + "')", conn);
cmd.ExecuteNonQuery();

The TextBox is defined like so:

<asp:TextBox ID="txtSite" runat="server" AutoComplete="off" TabIndex="4" MaxLength="50" Style="width: 230px" Enabled="false" CssClass="FormDisabledTextWithSmallHeight" />

I have also tried changing my JQuery to use plain Javascript instead and doing this:

document.getElementById("txtSite").value = msg.d.SiteName;

Still returns me an empty value.

Upvotes: 13

Views: 30394

Answers (2)

pete
pete

Reputation: 25081

You have your textbox set to Enabled="false" which renders in the browser with a disabled="disabled". Disabled form inputs are not submitted.

The solution is either to make the textbox enabled and read-only:

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

or to use a different element set with runat="server", like a <asp:HiddenField /> and update both the textbox and the alternate element with your AJAX call:

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

Upvotes: 22

Rana
Rana

Reputation: 6154

Yes, I definitely think, your text box should have a name attribute in html code, check for it. Without a 'name' attribute browser won't post this input box's data to server and thus you won't get it in server side c# code. Hope, this make sense..

Upvotes: 0

Related Questions