0

我有一个名为 AddNews.aspx 的页面,在代码隐藏中有一个名为 AddNews(Parameters)..

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 并不理想。在 Master Pages 的演员表中,ASP.NET 在 ID 前面加上 Master Page 的 ContentPlaceholder ID(即MainContent_btnSave)。

您可以做的是使用与 javascript: 内联的服务器代码,<%=btnSave.ClientId%>而不是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

不要让母版页让您感到困惑。只是:

$('#btnSave').click(function() {
  //ajax call like you had
});
于 2010-06-02T18:56:35.833 回答
1

如果您在 head 部分使用 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 回答
0

我认为您可能在使用 jQuery 的 .NET 母版页时遇到了一个非常常见的问题——当元素的 id 是由母版页生成的页面的一部分时,.NET 会更改您的元素的 ID,以避免名称冲突。如果您查看生成的页面源代码,您的按钮 id 可能更像ct100_panel1_btnSave. 如果您想使用 id 调用,则需要使用该 id。否则,向按钮添加一个类,按该类选择按钮(.NET 不处理类)。

于 2010-06-02T19:02:14.010 回答
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
$(document).ready(function() {
    $("#btnSubmit").click(function(event) {

        //
    });
}); 
于 2010-06-02T20:05:36.070 回答