我在一个执行回发的页面上有一个LinkButton,但也有一个onClientClick
事件.我们的想法是在后台设置一些会话变量来自客户端数据(不要问).
我在Web方法中设置了一个断点来逐步执行代码,我们遇到的是,根据浏览器的不同,PageMethods可能会返回成功消息,失败消息或根本没有消息.此外,无论PageMethods结果如何,都可以调用或不调用Web方法.
这是一个方便的结果小图表:
Browser PageMethods WebMethod
-------------- ------------- --------------------
IE 8, 9, 10 Success Called successfully
Safari 5.1.7 Failure *Never called*
Firefox 25.0.1 *Neither* Called successfully
Chrome v31 Failure Called successfully
这是四种不同的浏览器,以及四种不同的结果.
我已经尝试在服务器端和客户端代码中生成具有相同效果的链接按钮,甚至没有在WebMethod中设置会话变量,结果相同.
可以使用以下简单代码重现代码:
和
protected void Page_Load(object sender, EventArgs e) { LinkButton lbAdd = new LinkButton(); lbAdd.Text = "Web method test"; lbAdd.CausesValidation = false; lbAdd.OnClientClick = "doStuff();"; mainForm.Controls.Add(lbAdd); } [WebMethod] public static void doStuffWebMethod(string a, string b) { try { //System.Web.HttpContext.Current.Session["a"] = a; //System.Web.HttpContext.Current.Session["b"] = b; string x = a + b; } catch (Exception ex) { // } }
问题:
为什么我的Web方法在Safari中失败,并在三个其他浏览器中给我三个不同的返回消息之一?
如何更改此代码以使其在提到的浏览器中工作?