PageMethods in ASP.NET failed to work if you have ASP.NET Routing Implemented

北慕城南 提交于 2020-01-10 04:12:11

问题


I have a web method:

[System.Web.Services.WebMethod]
public static string getCharacterstics(int product_id, int lang_id)
{
    // code goes here...
}

I want to access it using PageMethods like: (Provided the condition that i have Enable PageMethods in ScriptManager):

<script type="text/javascript">
    $(document).ready(
        function () {
            $('#characterstics').html("loading");
            // '<%= product_id_property %>' , '<%= this.LanguageID %>'
            PageMethods.getCharacterstics(0 ,0 , OnSave);
        }
    );

    function OnSave(result) {
    }
</script>

I get the error "the http verb post to access path.. is not allowed"

I googled it and search the SO too but does not get any solution regarding to it Based on ASP.NET Routing.

What i believe is that because of asp.net routing the service methods are not accessible.

In addition i think i cannot even use JSON because of asp.net routing too.

Any help is appreciated.

Updated:

If i run the page with this url:

http://localhost:2606/searchdetail.aspx

The web method executed successfully.

Now

I have routing like this:

       routes.MapPageRoute("searchdetail", "searchdetail/{ID}", "~/searchdetail.aspx");
        routes.MapPageRoute("searchdetail", "searchdetail", "~/searchdetail.aspx");

The set_path() will work only for case 2 i.e without ID but does not work with case 1

if i try

   http://localhost:2606/searchdetail

It works fine

but if i try to use:

http://localhost:2606/searchdetail/123

It gives error that object expected.

So set_path() is the option what should i write.


回答1:


Currently, WebMethods don't work transparently with the Routing framework. There is a work around. You have to access the PageMethods directly by doing the following in your javascript:

PageMethods.set_path('/the/path/to/your/page.aspx');
PageMethods.YourMethod(params, onSuccess, onFailure);

I hope this helps.




回答2:


I kept running into this myself. With routing enabled, if I added a value to the path, it would start to fail again. This solution is a bit of a hack, but it seems to be working consistently.

Create a server control hyperlink where the navigate url refers to itself, then once the control renders, grab the href and use it for set_path

This gets around the issue of set_path not referring to the correct location if you called

<asp:HyperLink ID="hlPage" runat="server" NavigateUrl="~/user.aspx" ClientIDMode="Static"></asp:HyperLink>

<script>
$(document).ready(function () {PageMethods.set_path($('#hlPage').attr('href'));})
</script>


来源:https://stackoverflow.com/questions/8147186/pagemethods-in-asp-net-failed-to-work-if-you-have-asp-net-routing-implemented

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!