我正在使用第三方控件来处理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
内部强制回发。我知道回发的大多数方法都不起作用。
答案 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
}