JQuery,ASCX和webmethods似乎不起作用

时间:2010-04-24 15:07:39

标签: c# jquery asp.net .net

我有一个级联下拉列表(其中3个)类型,类别和子类别。首先输入负载,然后选择类型,类别负载和类别,子类别负载的选择。 我还有2个按钮,“添加类别”和“添加子类别”点击这些按钮后,我调用一个JQuery模态表单来添加它们。我在后面的代码中使用Webmethod将它们添加到数据库

这在ASPX页面中完美运行。

由于我需要在3-4页中使用它,我想把上面的用户控制(ASCX)。当我尝试在网页中使用它时,ASCX中的web方法不会被调用。

我的方法是否正确?应该为我的场景做些什么

向前推荐你的建议。

提前致谢 Karthik

2 个答案:

答案 0 :(得分:6)

我认为你不能在ASCX控件中拥有WebMethod。 我为我的问题解决了这个问题:

AJAXBridge:

namespace Demo{
public partial class AjaxBridge : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {

    }
    [WebMethod(EnableSession = true)]
    public static string Control_GetTest()
    {
        return Control.GetTest();
    }
}}

Control.ascx.cs

namespace Demo{
public partial class Control : System.Web.UI.UserControl
{
    protected void Page_Load(object sender, EventArgs e)
    {
    HttpContext.Current.Session["test"] = DateTime.Now.ToString();
    }

    // ALMOST A WEB METHOD
    public static string GetTest()
    {
        return " is " + HttpContext.Current.Session["test"];
    }
}}

Control.ascx

<script type="text/javascript">    
var dataSend = {};

$.ajax({
    type: "POST",
    url: "AjaxBridge.aspx/Control_GetTest",
    data: dataSend,
    cache: false,
    contentType: "application/json; charset=utf-8",
    dataType: "json",
    beforeSend: function(data) {
        alert("before");
    },
    success: function(data) {
        alert("Page Load Time from Session " + data.d);
    },
    fail: function() {
        alert("fail");
    }
});    </script>

所以你有一个ASPX,它基本上就像所有Web控件中所有AJAX方法的接口一样。还有一些优点,例如对所有暴露的WebMethods进行概述和控制,这使得处理安全问题变得更加容易(例如,使用Annotations)。

答案 1 :(得分:0)

在移动之前,您的Web方法是否在后面的代码中是静态方法,该方法标记有WebMethod属性,如“在ASP.NET网页中调用静态方法”部分here中所述?如果是这样,这种类型的webmethod只能在页面级别工作,不能在用户控件中使用。有关替代方案,请阅读this page的前两部分。