Главная страница и проблема Jquery? - PullRequest
0 голосов
/ 02 июня 2010

У меня есть страница с именем AddNews.aspx и в коде позади веб-метода с именем AddNews (Параметры) ..

Страница AddNews.aspx унаследована от главной страницы. Поэтому я использовал заполнитель содержимого.

У меня есть кнопка ... Это идентификатор 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>

Нажатие кнопки не срабатывает .. Что я могу сделать? Благодаря.

Ответы [ 8 ]

2 голосов
/ 18 ноября 2011

.NET Framework 4 добавил свойство "ClientIDMode" к элементам управления. Установка ClientIDMode = "Static" позволяет вам использовать точный идентификатор, который вы определили в теге управления.

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
2 голосов
/ 02 июня 2010

ASP.NET часто меняет идентификатор серверного элемента управления, поэтому жесткое кодирование идентификатора элемента управления в вашем Javascript не является идеальным. При приведении к мастер-страницам ASP.NET добавляет идентификатор к идентификатору ContentPlaceholder на главной странице (т.е. 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()%> вместо <%=btnSave.ClientId%> VB *.

1 голос
/ 03 июня 2010

Если вы используете 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>

Возможно, вы захотите взглянуть на сгенерированную разметку и посмотреть, какой идентификатор у вашей кнопки. Если он находится на вложенной главной странице или в элементе управления, он может не заканчиваться на btnSave.

    <asp:Content ID="HeadContent" ContentPlaceHolderID="head" runat="server">
<script>
        $(function(){
             $('input[id*="btnSave"]').click(function(){
                  ....
             });
        });
</script>
    </asp:Content>
1 голос
/ 02 июня 2010

Не позволяйте главной странице сбить вас с толку. Это просто:

$('#btnSave').click(function() {
  //ajax call like you had
});
0 голосов
/ 03 июня 2010
$(document).ready(function() {
    $("#btnSubmit").click(function(event) {

        //
    });
}); 
0 голосов
/ 02 июня 2010

Попробуйте

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

, чтобы убедиться, что он идентифицирует ваш контроль.

В документации jQuery для селекторов в квадратных скобках они всегда охватывают его чем-то другим. input[selector], div[selector] и т. Д. Я тоже всегда использовал их таким образом, поэтому вполне возможно, что jQuery просто не знает, что делать с селектором атрибутов с незаданной областью.

0 голосов
/ 02 июня 2010

Является ли кнопка элементом управления WebForm? Если это так, сценарии, которые публикуют форму, могут сработать до того, как ваш javascript будет запущен.

В этом случае используйте HTML-элемент, который не имеет атрибута runat = "server".

Если вы не уверены относительно идентификатора кнопки, просто посмотрите на визуализированный HTML.

0 голосов
/ 02 июня 2010

Я думаю, что вы, вероятно, столкнулись с очень распространенной проблемой при использовании главных страниц .NET с jQuery - .NET изменяет идентификатор вашего элемента, когда он является частью страницы, сгенерированной с главной страницей, чтобы избежать конфликтов имен. Если вы посмотрите на сгенерированный исходный код вашей страницы, то идентификатор вашей кнопки, вероятно, будет больше похож на ct100_panel1_btnSave. Если вы хотите использовать идентификационный вызов, вам нужно использовать этот идентификатор. В противном случае, добавьте класс к кнопке, выберите кнопку для этого класса (.NET не отключает классы).

...