ASP.NET вызывает событие сервера кнопок ASP.NET в JavaScript - PullRequest
0 голосов
/ 08 июня 2009

У меня есть страница ASP.NET с одним элементом управления Asp.net и обычной ссылкой HTML (якорная страница). Я хочу вызвать событие postbackl элемента управления asp.net, когда кто-то нажимает на ссылку.

Я использовал следующий код

 <a href="javascript:myFunction();" class="checkout" ></a>
<asp:Button ID="btnCheckout" runat="server" Visible="false" 
onclick="btnCheckout_Click" />

и в моем javascript у меня есть

 function myFunction() 
    { 
        var strname; 
        strname = "Test"; 

        __doPostBack('btnCheckout','OnClick');
    }

Но когда я запускаю gthis, я получаю сообщение об ошибке типа __doPostBack не определено

Может кто-нибудь сказать мне, почему это так?

Заранее спасибо

Ответы [ 2 ]

1 голос
/ 08 июня 2009

Это в любом случае не сработало бы. Когда вы делаете свой элемент управления .NET невидимым с помощью 'Visible = "false", он не отображается, то есть недоступен на клиенте.

Вернуться к вашему вопросу. 1- Где определяется myFunction? Между тегом? 2- Есть ли еще элементы управления .NET на странице? Если других элементов управления .NET нет, в .NET не добавляются все сценарии, необходимые для обратных передач и прочего.

Почему бы не сделать следующее (основываясь на ответе TheVillageIdiot):

<asp:LinkButton ID="lbtnCheckout" runat="server" CausesValidation="false" OnClick="lbtnCheckout_Click" CssClass="checkout" />

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

0 голосов
/ 08 июня 2009

Сначала я попробовал ваш код, но также не получил ничего похожего на __ doPostBack , затем добавил на страницу еще одну кнопку, которая была видна, но она была все той же. Затем я добавил LinkButton и получил метод __ doPostBack . Вы можете сделать пост обратно из javascript, но тогда EventValidation является проблемой, так как он не допускает такого рода вещи. Мне пришлось использовать следующее, чтобы преодолеть это, и это сработало:

    protected override void Render(HtmlTextWriter writer)
    {
        ClientScript.RegisterForEventValidation(
                  new PostBackOptions(btnCheckout, "OnClick"));
        base.Render(writer);
    }

Я думаю, что я немного непоследователен в ответе, поэтому я отмечу это как wiki:)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...