Страница перезагружается после обратного вызова клиента на основе ajax в WCF - PullRequest
1 голос
/ 20 февраля 2010

Я настроил базовый обратный вызов на стороне клиента для службы WCF. см. пример кода ниже.

при просмотре с использованием http-фильтра, подключенного к проводнику, вы можете видеть, что: 1. service1.svc / js работает нормально и возвращает правильный браузер Java в браузер 2. serrvice1.svc работает и возвращает правильные данные json. 3. вызов в порядке и с помощью оповещения вместо обновления информации о div я получаю данные.

но затем, после нажатия кнопки «ОК», страница перезагружается с нуля.

Не могу понять, почему? есть идеи?

код:

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="WebForm1.aspx.cs" Inherits="Simple_ClientNetwork_Calls.WebForm1" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
    <title></title>

</head>
<body >
    <form id="form1" runat="server">
    <div>
        <asp:ScriptManager ID="ScriptManager1" runat="server">
            <Scripts>
                <asp:ScriptReference Path="~/WebKit.js" />
            </Scripts>
             <Services>
                <asp:ServiceReference  Path="~/Service1.svc" />
            </Services>
        </asp:ScriptManager>
      <script type="text/javascript">
          var BedList = null;
          var status = null;

          //add a window.load handler to init any necessary controls
          Sys.Application.add_load(initializeControls);

          function initializeControls(e) {
              status = $get("status");
          }

          function testme() {
              document.bgColor = "#FF0000";
              getBedList();
          }

          function getBedList() {
              iMDsoft.Demo.SimpleService.GetBedList(GetBedListOnSuccess, GetBedListOnFailed);
          }


          function GetBedListOnSuccess(results, context, methodName) {

              var BedList = results
              status.innerText = "Complete" + BedList[0].Name;
          }

          function GetBedListOnFailed(results, context, methodName) {
              status.innerText = "GetBedListOnFailed: " + results.get_message();
          }

    </script>
    <button id="button1" onclick="testme();" >TestMe</button>
    <div id="status">
            </div>
     </div>
    </form>
</body>
</html>

Ответы [ 2 ]

0 голосов
/ 20 февраля 2010

Хорошо, есть несколько вещей, которые следует учитывать:

  1. Убедитесь, что вы предоставляете конечную точку привязки с поддержкой веб-http в своем веб-сервисе:

    <endpoint address="" 
              binding="webHttpBinding" 
              contract="Namespce.IServiceContract" />
    
  2. Убедитесь, что вы используете WebScriptServiceHostFactory фабрику в вашей .svc разметке:

    <%@ ServiceHost 
        Language="C#" 
        Debug="true"    
        Factory="System.ServiceModel.Activation.WebScriptServiceHostFactory" 
        Service="Namespace.Service1" 
        CodeBehind="Service1.svc.cs" %>
    
  3. Вы вызываете функцию iMDsoft.Demo.SimpleService.GetBedList, но убедились, что такая функция существует в сгенерированном прокси javascript (http://example.com/service1.svc/js)? Например:

    [ServiceContract(Namespace = "http://imdsoft.demo")]
    public interface IService1
    {
        [OperationContract]
        string GetBedList();
    }
    

    сгенерирует следующий метод прокси javascript: imdsoft.demo.iservice1.GetBedList

0 голосов
/ 20 февраля 2010

Не уверен, относится ли это и к кнопкам, но, по крайней мере, для ссылок, вам нужно возвращать false в событии onclick. Попробуйте это:

<button id="button1" onclick="testme();return false;" >TestMe</button>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...