C# 如果已实现ASP.NET路由,则ASP.NET中的PageMethods无法工作

C# 如果已实现ASP.NET路由,则ASP.NET中的PageMethods无法工作,c#,asp.net,json,url-routing,scriptmanager,C#,Asp.net,Json,Url Routing,Scriptmanager,我有一个web方法: [System.Web.Services.WebMethod] public static string getCharacterstics(int product_id, int lang_id) { // code goes here... } 我想使用PageMethods访问它,如: (前提是我已在ScriptManager中启用PageMethods): web方法已成功执行 现在 我的路线是这样的: routes.MapPageRoute

我有一个web方法:

[System.Web.Services.WebMethod]
public static string getCharacterstics(int product_id, int lang_id)
{
    // code goes here...
}
我想使用PageMethods访问它,如: (前提是我已在ScriptManager中启用PageMethods):

web方法已成功执行

现在

我的路线是这样的:

       routes.MapPageRoute("searchdetail", "searchdetail/{ID}", "~/searchdetail.aspx");
        routes.MapPageRoute("searchdetail", "searchdetail", "~/searchdetail.aspx");
set_path()仅适用于情况2,即没有ID,但不适用于情况1

如果我尝试

   http://localhost:2606/searchdetail
它很好用

但如果我尝试使用:

http://localhost:2606/searchdetail/123
它给出了对象所期望的错误


因此,set_path()是我应该写什么的选项。

目前,WebMethods在路由框架中不能透明地工作。有一个工作机会。您必须通过在javascript中执行以下操作直接访问PageMethods:

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

我希望这能有所帮助。

我自己也经常遇到这种情况。启用路由后,如果我向路径添加值,它将再次失败。这个解决方案有点像黑客,但它似乎一直在工作

创建一个服务器控件超链接,其中导航url指向自身,然后在控件呈现后,抓取href并将其用于set_path

这就解决了set_path在调用时没有指向正确位置的问题

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

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

$(document).ready(函数(){PageMethods.set_path($('hlPage').attr('href'));})

我尝试使用设置路径,但它不起作用。我还更新了我的问题谢谢Neha我完成了。实际上,我使用js引用作为:而不是作为。这就是为什么一开始你的查询对我不起作用的原因。我用小提琴来找出问题
PageMethods.set_path('/the/path/to/your/page.aspx');
PageMethods.YourMethod(params, onSuccess, onFailure);
<asp:HyperLink ID="hlPage" runat="server" NavigateUrl="~/user.aspx" ClientIDMode="Static"></asp:HyperLink>

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