ASP.NET асинхронный постбэк на asp: нажатие кнопки - PullRequest
3 голосов
/ 16 января 2012

Я использую AJAX в asp: net и пытаюсь справиться с ситуацией, когда кнопка asp: вызывает как метод javascript, так и метод codebehind c #.Для этого я использую атрибуты onclick и onClientClick для кнопки.Мне нужно, чтобы произошла обратная передача для вызова codebehind, однако эта обратная передача заставляет JavaScript не работать, потому что переменные потеряли состояние.Кто-нибудь может описать, как справиться с этим?Возможно с ajax и асинхронной обратной передачей?Это начинает сводить меня с ума!

Редактировать: Javascript на самом деле для Google-карты (v3), код C # для отправки в БД sql.

Картаинициализируется в коде с:

protected void Page_Load(object sender, EventArgs e)
    {
        if(!Page.IsPostBack) {
            ScriptManager.RegisterStartupScript(this, this.GetType(), "onload", "initialize_map();", true);
            submitButton.Command += new CommandEventHandler(this.submitButton_Click);
        }
    }

Вот некоторые из соответствующих кодов:

<asp:UpdatePanel runat="server" ID="Form" UpdateMode="Conditional">
<ContentTemplate>

(...form stuff...)

<asp:Button ID="submitButton" runat="server" Text="Submit" ValidationGroup="NewCallFormSubmit" OnClientClick="calcRoute(); return false;" onclick="submitButton_Click" />

</ContentTemplate>
</UpdatePanel>

<asp:UpdatePanel runat="server" ID="DisplayUpdatePanel" UpdateMode="Conditional">
<ContentTemplate>

 <h1>
  Pick-Up and Drop-Off Locations
  </h1>
     <!-- Map Layout -->
     <div id="map_canvas" style="width: 500px; height: 500px;"></div>                          

</ContentTemplate>
</asp:UpdatePanel>

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

1 Ответ

8 голосов
/ 16 января 2012

Если вы просто хотите запустить код OnClientClick (клиент) перед кодом OnClick (сервер), попробуйте следующее:

ASP.NET

<asp:Button ID="btn_mybutton" runat="server" Text="MyButton" OnClientClick="return JSFunction();" OnClick="CFunction"/>

Javascript

<script type="text/javascript">
    function JSFunction() {
        alert('Some JavaScript stuff');
        return true; 
    }
</script>

C #

protected void CFunction(object sender, EventArgs e)
{
    // Some server code
}

Функция JavaScript выполняется первой и возвращается до того, как будет выполнен код сервера.

...