【问题标题】:PageMethods in ASP.NET failed to work if you have ASP.NET Routing Implemented如果您实现了 ASP.NET 路由,则 ASP.NET 中的 PageMethods 无法工作
【发布时间】:2011-12-30 03:17:36
【问题描述】:

我有一个网络方法:

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

我想使用 PageMethods 来访问它,例如: (前提是我在 ScriptManager 中启用了 PageMethods):

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

    function OnSave(result) {
    }
</script>

我收到错误“不允许访问路径的 http 动词帖子..”

我用谷歌搜索了它并搜索了 SO,但没有得到任何关于它的解决方案,基于 ASP.NET 路由。

我认为由于 asp.net 路由,服务方法无法访问。

此外,我认为我什至不能使用 JSON,因为 asp.net 路由也是如此。

感谢任何帮助。

更新:

如果我使用这个 url 运行页面:

http://localhost:2606/searchdetail.aspx

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() 是我应该写的选项。

【问题讨论】:

    标签: c# asp.net json url-routing scriptmanager


    【解决方案1】:

    目前,WebMethods 不能透明地与路由框架一起工作。有一个解决方法。您必须通过在您的 javascript 中执行以下操作来直接访问 PageMethods:

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

    我希望这会有所帮助。

    【讨论】:

    • 我尝试使用 set_path 但它不起作用。我也更新了我的问题
    • 谢谢 Neha,我已经完成了。实际上,我将 js 引用用作: 而不是 。这就是为什么您的查询一开始对我不起作用的原因。我用fiddler来找问题
    【解决方案2】:

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

    创建一个服务器控件超链接,其中导航 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>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多