gpt4 book ai didi

javascript - webmethod 没有被触发

转载 作者:行者123 更新时间:2023-12-03 04:17:15 27 4
gpt4 key购买 nike

我第一次尝试从 javascript 调用服务器端函数,但没有成功,因为 webmethod 没有被调用。

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

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

<asp:ScriptManager runat="server" ID="ScriptManager1" EnablePageMethods="true" />

aspx 页面有:

<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>

在代码后面:

[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 方法,然后在警报框中显示页面源代码(当然是部分的)。

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

最佳答案

我可以在我的本地机器上重现这个。请注意,脚本模块未在 web.configmodules 部分中注册!

确保在 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>

更新

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

public static class RouteConfig  
{
public static void RegisterRoutes(RouteCollection routes)
{
var settings = new FriendlyUrlSettings();
settings.AutoRedirectMode = RedirectMode.Off;
routes.EnableFriendlyUrls(settings);
}
}

如果您想保留友好 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);
}

关于javascript - webmethod 没有被触发,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44093711/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com