首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >webmethod未被触发。

webmethod未被触发。
EN

Stack Overflow用户
提问于 2017-05-21 06:07:30
回答 2查看 1K关注 0票数 0

我第一次尝试获得从javascript调用的服务器端函数时,没有工作,因为get方法没有被调用。

aspx文件包含一个引导样式按钮;单击时,我需要向用户的“收藏夹”列表中添加一个记录(在数据库中添加一个记录)。

该页从母版页继承,母版页包含:

代码语言:javascript
运行
复制
<asp:ScriptManager runat="server" ID="ScriptManager1" EnablePageMethods="true" />

aspx页面有:

代码语言:javascript
运行
复制
<script type="text/javascript">
function addFavorite(url, friendly) {debugger
    PageMethods.AddFavorite(url, friendly, onSuccess);
}
function onSuccess(result, userContext, methodName) {debugger
    alert(result);
}
</script>

<button type="button" class="btn btn-primary btn-xs" onclick="addFavorite('some_url', 'some firendly name');">
<i class="fa fa-heart-o" aria-hidden="true"></i>Favorites</button>

在代码后面:

代码语言:javascript
运行
复制
[WebMethod]
public static string AddFavorite(string sURL, string sFriendlyName)
{
    // This is where I would add a record to a DB table, but for testing ...
    return sFriendlyName;
}

当我单击该按钮时,它会点击addFavorites(),然后立即单击onSuccess并绕过web方法,它将页面源显示在一个警告框中(当然,这是部分的)。

我已经搜索过了,似乎不知道我做错了什么。所有的例子都显示了我所采取的相同步骤。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-05-21 07:06:52

我可以在我的本地机器上复制这个。注意到脚本模块没有在 web.config中的模块web.config节中注册!

确保在web.config中包含了脚本模块,如下所示:

代码语言:javascript
运行
复制
<system.webServer>
          <modules>
           <!-- *...other registered modules..* -->
           <add name="ScriptModule" preCondition="integratedMode" type="System.Web.Handlers.ScriptModule, System.Web.Extensions, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/>
           </modules>
    </system.webServer>

更新

确保将FriendlyUrlSettings.AutoRedirectMode设置为Off,否则页面方法请求将返回401 UnAuthorized。代码在RouteConfig中应该设置如下:

代码语言:javascript
运行
复制
public static class RouteConfig  
{  
    public static void RegisterRoutes(RouteCollection routes)  
    {  
        var settings = new FriendlyUrlSettings();  
        settings.AutoRedirectMode = RedirectMode.Off;  
        routes.EnableFriendlyUrls(settings);  
    }  
}  

如果您想保留友好的url,那么添加您自己的友好url解析器,它继承自WebFormsFriendlyUrlResolver,如下所示:

代码语言:javascript
运行
复制
public static class RouteConfig
{
    public static void RegisterRoutes(RouteCollection routes)
    {
        var settings = new FriendlyUrlSettings();
        settings.AutoRedirectMode = RedirectMode.Permanent;
        routes.EnableFriendlyUrls(settings, new WebMethodFriendlyUrlResolver());
    }
}

public class WebMethodFriendlyUrlResolver : WebFormsFriendlyUrlResolver
{
    public override string ConvertToFriendlyUrl(string path)
    {
        if (HttpContext.Current.Request.PathInfo != string.Empty)
        {
            return path;
        }
        else
        {
            return base.ConvertToFriendlyUrl(path);
        }
    }
}

如果启用了友好的URL,则必须更新JavaScript回调函数,以设置包含.aspx扩展的路径:

代码语言:javascript
运行
复制
function addFavorite(url, friendly) {  
        PageMethods.set_path(PageMethods.get_path() + '.aspx');  
        PageMethods.AddFavorite(url, friendly, onSuccess, onError);  
}  
票数 4
EN

Stack Overflow用户

发布于 2017-05-21 07:46:54

添加一个onFailure方法以查看它是否被击中。(这可能是必需的,但我不确定。)编辑:我不认为这是必需的。我刚复制了你的代码,它在这里工作。

要确定的是:那些js函数在脚本标记中吗?(我想是的,如果“成功”受到打击的话。只是检查一下。)

再检查一次:使用必需语句后的代码:using System.Web.Services;

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44093711

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档