13

TextBoxajax投稿を介してコントロール値を設定しています。

$('#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" />

また、代わりにプレーンJavascriptを使用するようにJQueryを変更して、次のことを試みました。

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"、などで設定された別の要素を使用<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 属性が必要だと思います。確認してください。「name」属性がないと、ブラウザはこの入力ボックスのデータをサーバーに送信しないため、サーバー側の C# コードで取得できません。うまくいけば、これは理にかなっています..

于 2013-01-23T18:12:31.060 に答える