在WebMethod中强制回发

时间:2014-08-28 14:43:46

标签: c# javascript webmethod

我正在使用第三方控件来处理GIS地图相关功能。 我需要在javascript中调用C#方法。我选择像这样使用PageMethods

PageMethods.getFeature(x,y)

只要您将方法转换为[WebMethod]

,就像魅力一样

在这个方法中,我传递了鼠标的坐标,它返回了我的地图特征。我将在地图上突出显示。

从研究中我发现你无法从[WebMethod]中直接访问UI,所以我决定设置会话变量和回发。在回发时,如果会话变量存在,我将进行必要的UI更改。

我的WebMethod看起来像这样:

[WebMethod(EnableSession = true)]
        public static void getFeature(float x, float y)
        {...
        some code in here. 
        }

更新 这是我的jQUery:

  <script>
        $(document).ready(function (e) {
            $(".MyMap").click(function (e) {
                var posX = $(this).position().left;
                var posY = $(this).position().top;
                PageMethods.getFeature(e.pageX-posX, e.pageY-posY);
              });
        });
    </script>

如何在WebMethod内部强制回发。我知道回发的大多数方法都不起作用。

1 个答案:

答案 0 :(得分:0)

特别感谢@BenRobinson协助我朝着正确的方向前进。这就是我想出的。我发布此信息给其他可能犯同样错误的人。简短的回答是:**你不能

我的主要问题是我使用的是[WebMethod],因此可以从jQuery调用我的c#代码。这非常有效,直到我需要访问UI。技术上很好的WebMethod&#39;几乎就像调用Web服务一样。您无法使用远程Web服务更新UI。你可以做的是在调用[WebMethod]的jQuery运行函数后,让它调用一个新页面(window.location)。该位置可以调用原始页面(在我的例子中是Default.aspx)。我在请求字段中传递了我需要发送到UI的参数,我基本上把代码放在那里,如果在加载时你看到一个特定的请求变量然后做一些事情......它就像一个魅力。

这是一个粗略的例子: 在我的jQuery页面中,我做了这个(导航到新页面):

window.location.replace("ZoomAndCenter.aspx?x=" + (e.pageX - posX) + "&y=" + (e.pageY - posY))

这是我的ZoomAndCenter.aspx的样子:

protected void Page_Load(object sender, EventArgs e)
            {
                int x = 0;
                double y = 0;
                x = Int32.Parse(Request["x"].ToString());
                y = Double.Parse(Request["y"].ToString());
                //Run some more code
                Response.Redirect("Default.aspx?Param1=xxxx&Param2=xxxx");
                //passed the params in the redirect.
             }

然后在Default.aspx

 if(request["param1"] == "something")
{
//do something
}