Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/385.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript webmethod未被激发_Javascript_C#_Asp.net_Webmethod - Fatal编程技术网

Javascript webmethod未被激发

Javascript webmethod未被激发,javascript,c#,asp.net,webmethod,Javascript,C#,Asp.net,Webmethod,我第一次尝试从javascript调用服务器端函数时,由于webmethod没有被调用,因此无法正常工作 aspx文件包含一个引导式按钮;单击时,我需要将一条记录添加到用户的“收藏夹”列表中(在数据库中添加一条记录) 该页继承自母版页,母版页包含: <asp:ScriptManager runat="server" ID="ScriptManager1" EnablePageMethods="true" /> 当我单击该按钮时,它会点击addFavorites(),并在成功后立即绕

我第一次尝试从javascript调用服务器端函数时,由于webmethod没有被调用,因此无法正常工作

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

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

<asp:ScriptManager runat="server" ID="ScriptManager1" EnablePageMethods="true" />
当我单击该按钮时,它会点击addFavorites(),并在成功后立即绕过web方法,然后在警报框中显示页面源(当然部分是这样)


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

我可以在本地机器上重新编程。注意到脚本模块没有在web.config中的modules部分注册

确保在web.config中包含脚本模块,如下所示,以使其正常工作:

<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>
如果要保留友好url,请添加从WebFormsFriendlyUrlResolver继承的自己的友好url解析程序,如下所示:

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扩展名:

function addFavorite(url, friendly) {  
        PageMethods.set_path(PageMethods.get_path() + '.aspx');  
        PageMethods.AddFavorite(url, friendly, onSuccess, onError);  
}  

我可以在本地机器上重新编程。注意到脚本模块没有在web.config中的modules部分注册

确保在web.config中包含脚本模块,如下所示,以使其正常工作:

<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>
如果要保留友好url,请添加从WebFormsFriendlyUrlResolver继承的自己的友好url解析程序,如下所示:

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扩展名:

function addFavorite(url, friendly) {  
        PageMethods.set_path(PageMethods.get_path() + '.aspx');  
        PageMethods.AddFavorite(url, friendly, onSuccess, onError);  
}  

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

必须问一下,只是为了确保:那些js函数在脚本标记中?(我想是的,如果“成功”被击中了,就检查一下。)


再检查一次:所需代码隐藏使用语句:
使用System.Web.Services

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

必须问一下,只是为了确保:那些js函数在脚本标记中?(我想是的,如果“成功”被击中了,就检查一下。)



再检查一次:所需代码隐藏使用语句:
使用System.Web.Services

尝试了此操作,但无效。它确实抱怨了“前提条件”,说这是不允许的属性。您使用的ASP.NET/VS/IIS的版本是什么?.NET 4.5,VS 2017,IIS 7.5。您在调用page方法时是否遇到401未经授权的异常如果是这样,请尝试关闭RouteConfig中FriendlyUrlSettings的AutoRedirectMode属性,如下所示:public static void registerOutes(RouteCollection路由){var settings=new FriendlyUrlSettings();settings.AutoRedirectMode=RedirectMode.Off;routes.enableFriendlyURL(设置);}完美!这就成功了。唯一的想法是,现在所有页面的URL中都有blah.aspx,而不是友好的名称(我没有“Home”,而是“default.aspx”)。是否可以有条件地将重定向模式设置为关闭?已尝试此操作,但没有帮助。它确实抱怨了“前提条件”,说这是不允许的属性。您使用的ASP.NET/VS/IIS的版本是什么?.NET 4.5,VS 2017,IIS 7.5。您在调用page方法时是否遇到401未经授权的异常如果是这样,请尝试关闭RouteConfig中FriendlyUrlSettings的AutoRedirectMode属性,如下所示:public static void registerOutes(RouteCollection路由){var settings=new FriendlyUrlSettings();settings.AutoRedirectMode=RedirectMode.Off;routes.enableFriendlyURL(设置);}完美!这就成功了。唯一的想法是,现在所有页面的URL中都有blah.aspx,而不是友好的名称(我没有“Home”,而是“default.aspx”)。是否可以有条件地将重定向模式设置为off?我认为这不会有什么不同。您可以看到表单代码示例,我在JS函数中添加了“调试器”;onSuccess被点击并显示了一些东西,但这不是我预期的web方法的结果,而是部分页面源。我认为它在JS警报框(即警报(结果))中显示部分页面源的事实就是一个线索。为什么页面源存储在onSuccess()函数的“result”参数中?也许跟踪会发现一些东西。将
/trace.axd
添加到浏览器中url的末尾,然后按enter键。谢谢,我这样做了,它实际上显示了“Main/Default/AddFavorite”,状态代码为200(我相信它表示成功),动词为“POST”。方法(AddFavorite)位于文件“/Main/Default.aspx.cs”中。虽然我在该方法中设置的断点没有命中,但该方法似乎确实命中了。此外,该方法只返回一个参数(用于测试),该参数应该显示在警报框中,但它在警报框中显示部分页面源。我还看到:第6行的未处理异常,0x800a138f中的第97862列-JavaScript运行时错误:无法获取未定义或空引用的属性“webServiceFailedNoMsg”,我认为这不会有什么区别。您可以看到表单代码示例,我在JS函数中添加了“调试器”;onSuccess被点击并显示了一些东西,但这不是我预期的web方法的结果,而是部分页面源。我认为它在JS警报框(即警报(结果))中显示部分页面源的事实就是一个线索。为什么页面源存储在onSuccess()函数的“result”参数中?也许跟踪会发现一些东西。将
/trace.axd
添加到