0

AddNews.aspx というページがあり、分離コードには AddNews(Parameters) という Web メソッドがあります。

AddNews.aspx ページはマスター ページから継承されます。だから私は contentplaceholder を使用しました。

ボタンがあります..IDはbtnSaveです。

jqueryコードは次のとおりです。

$(function() {
    $("[id$='_btnSave']").click(function() {
        $.ajax({
            type: "POST",
            contentType: "application/json; charset=utf-8",
            data: $.toJSON(veriler),
            url: "AddNews.aspx/AddNews",
            dataType: "json",
            success: function(result) {
                $("#result").html('News added');
            },
            error: function() {
                alert('Problem');
            }
        });
    });
});
</script>

ボタンをクリックしてもトリガーされません。どうすればよいですか? ありがとう。

4

8 に答える 8

2

.NET Framework 4 では、プロパティ "ClientIDMode" がコントロールに追加されました。ClientIDMode="Static" を設定すると、コントロール タグで定義した正確な ID を使用できます。

function alertClicked(me) { alert("My ID is: " + me.id); }

<asp:Button ID="btnAlert" runat="server" Text="Alert"  OnClientClick="alertClicked(this)"/> 

--display bodycontaint_btnAlert

<asp:Button ID="btnAlert" runat="server" Text="Alert" ClientIDMode="Static" OnClientClick="alertClicked(this)" />

--display btnAlert
于 2011-11-18T13:59:09.823 に答える
2

ASP.NET はサーバー コントロールの ID を頻繁に変更するため、Javascript でコントロール ID をハードコーディングすることは理想的ではありません。マスター ページのキャストでは、ASP.NET は ID の先頭にマスター ページの ContentPlaceholder ID (つまりMainContent_btnSave) を追加します。

できることは、の<%=btnSave.ClientId%>代わりにjavascript: とインラインでサーバー コードを使用することですbtnSave

Javascript が .ASPX ファイルにある場合:

$("#<%=btnSave.ClientId%>").click(function() {
   /* ... */
}

JS が別のファイルにある場合は、ボタンを変数として宣言し、JS コードで変数を呼び出します。

.ASPX:

var btnSave = $("#<%=btnSave.ClientId%>");

.JS:

$(btnSave).click(function() {
   /* ... */
}

ちなみに、C# を使用している場合は<%=btnSave.ClientId()%>、VB の<%=btnSave.ClientId%>.

于 2010-06-02T19:20:33.080 に答える
1

ヘッドセクションでContentPlaceHolderを使用している場合は、jQueryをロードする行より下にあることを確認してください。

マスターページ:

<head runat="server">
<script src="<%=ResolveUrl("~/Scripts/jquery-1.4.2.min.js") %>"></script>
<asp:ContentPlaceHolder ID="head" runat="server">
    </asp:ContentPlaceHolder>
</head>

また、生成されたマークアップを調べて、ボタンのIDを確認することもできます。ネストされたマスターページまたはコントロールにある場合、btnSaveで終わらない場合があります。

    <asp:Content ID="HeadContent" ContentPlaceHolderID="head" runat="server">
<script>
        $(function(){
             $('input[id*="btnSave"]').click(function(){
                  ....
             });
        });
</script>
    </asp:Content>
于 2010-06-02T20:22:35.417 に答える
1

マスター ページに惑わされないようにしてください。それはただ:

$('#btnSave').click(function() {
  //ajax call like you had
});
于 2010-06-02T18:56:35.833 に答える
0
$(document).ready(function() {
    $("#btnSubmit").click(function(event) {

        //
    });
}); 
于 2010-06-02T20:05:36.070 に答える
0

ボタンはWebFormコントロールですか?その場合、フォームを投稿するスクリプトは、JavaScriptが実行される前に開始される可能性があります。

この場合、runat="server"属性を持たないHtml要素を使用します。

ボタンのIDがわからない場合は、レンダリングされたHTMLを確認してください。

于 2010-06-02T19:03:35.570 に答える
0

試す

$("input[id$='btnSave']")...

それがあなたのコントロールを識別していることを確認するために。

角括弧セレクターのjQueryドキュメントでは、常に他のスコープでスコープを設定しています。 input[selector]、、div[selector]など。私もいつもそのように使用しているので、jQueryがスコープ外の属性セレクターをどうするかを単に知らない可能性があります。

于 2010-06-02T19:03:41.407 に答える
0

おそらく、jQuery で .NET マスター ページを使用する際に非常によくある問題に遭遇したと思います。.NET は、マスター ページで生成されたページの一部である場合、名前の衝突を避けるために要素の ID を変更します。ページの生成されたソース コードを見ると、ボタンの ID はおそらくct100_panel1_btnSave. id 呼び出しを使用する場合は、その id を使用する必要があります。それ以外の場合は、ボタンにクラスを追加し、そのクラスでボタンを選択します (.NET はクラスを変更しません)。

于 2010-06-02T19:02:14.010 に答える