代码后面的参数到jquery [Master Page]

时间:2010-02-16 09:28:43

标签: asp.net jquery master-pages

我正在使用JQuery在母版页中创建Menu。我使用$ .ajax({});

将链接的id传递给jquery

问题:

Getting failed: Showing error message in AjaxFailed(result) function.

代码:HTML [JQuery的]

$.ajax({
             type: "POST",
            url: "Master.Master.cs/UserStatus",
            contentType: "application/json; charset=utf-8",
            data: "{}",
            dataType: "json",
            success: AjaxSucceeded,
            error: AjaxFailed
        });

function AjaxSucceeded(result) {

        if (result.d.length != 0) {
            for (var i = 0; i < result.d.length; i++) {
                $(result.d[i]).hide();
            }
        }
    }

    function AjaxFailed(result) {
        alert("Error");
    }  

c#代码:Codebehind

private static List<string> xx;
[WebMethod]
    public static List<string> UserStatus()
    {
        return xx;
    }
protected void Page_Load(object sender, EventArgs e)
    {
        xx = new List<string> {"#ll1", "#ll2" };

    }

4 个答案:

答案 0 :(得分:1)

webmethod属性的作用是说这个方法应该响应某个url(有点像asp.net mvc中的路由)。因为我不使用webforms,所以当它决定方法应该响应什么url时,我真的不知道它使用了什么逻辑。但我的猜测是网址应该是“Master.cs / UserStatus”(不确定.cs扩展名)。这当然是一个相对网址,所以你可以尝试这样的事情:<%=ResolveUrl("~/Master.cs/UserStatus")%>(如果主页在你的根文件夹中)。那你的例子应该是这样的:

$.ajax({
        type: "POST",
        url: '<%=ResolveUrl("~/Master.cs/UserStatus")%>',
        contentType: "application/json; charset=utf-8",
        data: "{}",
        dataType: "json",
        success: AjaxSucceeded,
        error: AjaxFailed
    });

<强>更新

.cs扩展名可能有误。但我认为你不应该在母版页中拥有它。您可能应该在Web服务或.ashx处理程序中使用它,或者如果您想使用ajax。但是你最后评论似乎你不需要使用ajax(如果你不需要那个,你就不应该)。您在评论中编写的代码中的问题可能是ID错误(请记住,您需要javascript中的客户端ID)。

但我可能会这样做:

<script type="text/javascript">
    var statuses = [];
    <%foreach(var status in UserStatus()) {%>
        statuses.push(<%=status%>);
    <%}%>
</script>

这将在浏览器中呈现此javascript:

<script type="text/javascript">
    var statuses = [];

        statuses.push("#ll1");
        statuses.push("#ll2");

</script>

然后,您将在statuses数组中获得状态。

答案 1 :(得分:1)

就像Andre和Mattias所提到的那样,.cs扩展名没有提供,所以你必须使用.aspx扩展名才能访问WebMethod。

我在您的示例中看到的问题是您将方法放在MasterPage(其扩展名为.master)中,该方法也没有提供,因此您无法从中调用Web方法。

您可以使用的解决方法是在继承自Page的类中定义它,并使所有页面都从该类继承。由于它是一种公共方法,因此它将在您的所有页面上公开,因此可用。基本上,是项目页面的基页。在这种情况下,您只需要使用当前页面的地址进行呼叫。这只有在您将在每个页面上使用的内容时才有用,例如菜单。

您可以使用的第二种解决方法是在项目中放置的.asmx Web服务中定义WebMethod。它就像在页面上调用WebMthod一样,只需要使用.asmx Webservice的地址而不是页面来进行调用。

答案 2 :(得分:0)

如果您还没有这样做,则需要将[ScriptService]属性添加到您的web方法中

  

表示可以使用Web服务   从脚本

调用

请参阅ScriptServiceAttribute

答案 3 :(得分:0)

我认为问题在于您尝试发布到.cs文件。由于安全原因,ISS不提供扩展名.cs。因此,即使您的方法在代码隐藏文件中生效,您也必须发布到.aspx文件。 ASP.NET将为您完成剩下的工作。 所以试试:

$.ajax({
         type: "POST",
        url: "/Master.Master.aspx/UserStatus",
        contentType: "application/json; charset=utf-8",
        data: "{}",
        dataType: "json",
        success: AjaxSucceeded,
        error: AjaxFailed
    });

function AjaxSucceeded(result) {

    if (result.d.length != 0) {
        for (var i = 0; i < result.d.length; i++) {
            $(result.d[i]).hide();
        }
    }
}

function AjaxFailed(result) {
    alert("Error");
}