我正在使用JQuery在母版页中创建Menu。我使用$ .ajax({});
将链接的id传递给jquery问题:
Getting failed: Showing error message in AjaxFailed(result) function.
代码:HTML [JQuery的]
$.ajax({
type: "POST",
url: "Master.Master.cs/UserStatus",
contentType: "application/json; charset=utf-8",
data: "{}",
dataType: "json",
success: AjaxSucceeded,
error: AjaxFailed
});
function AjaxSucceeded(result) {
if (result.d.length != 0) {
for (var i = 0; i < result.d.length; i++) {
$(result.d[i]).hide();
}
}
}
function AjaxFailed(result) {
alert("Error");
}
c#代码:Codebehind
private static List<string> xx;
[WebMethod]
public static List<string> UserStatus()
{
return xx;
}
protected void Page_Load(object sender, EventArgs e)
{
xx = new List<string> {"#ll1", "#ll2" };
}
答案 0 :(得分:1)
webmethod属性的作用是说这个方法应该响应某个url(有点像asp.net mvc中的路由)。因为我不使用webforms,所以当它决定方法应该响应什么url时,我真的不知道它使用了什么逻辑。但我的猜测是网址应该是“Master.cs / UserStatus”(不确定.cs扩展名)。这当然是一个相对网址,所以你可以尝试这样的事情:<%=ResolveUrl("~/Master.cs/UserStatus")%>
(如果主页在你的根文件夹中)。那你的例子应该是这样的:
$.ajax({
type: "POST",
url: '<%=ResolveUrl("~/Master.cs/UserStatus")%>',
contentType: "application/json; charset=utf-8",
data: "{}",
dataType: "json",
success: AjaxSucceeded,
error: AjaxFailed
});
<强>更新强>
.cs扩展名可能有误。但我认为你不应该在母版页中拥有它。您可能应该在Web服务或.ashx处理程序中使用它,或者如果您想使用ajax。但是你最后评论似乎你不需要使用ajax(如果你不需要那个,你就不应该)。您在评论中编写的代码中的问题可能是ID错误(请记住,您需要javascript中的客户端ID)。
但我可能会这样做:
<script type="text/javascript">
var statuses = [];
<%foreach(var status in UserStatus()) {%>
statuses.push(<%=status%>);
<%}%>
</script>
这将在浏览器中呈现此javascript:
<script type="text/javascript">
var statuses = [];
statuses.push("#ll1");
statuses.push("#ll2");
</script>
然后,您将在statuses
数组中获得状态。
答案 1 :(得分:1)
就像Andre和Mattias所提到的那样,.cs扩展名没有提供,所以你必须使用.aspx扩展名才能访问WebMethod。
我在您的示例中看到的问题是您将方法放在MasterPage(其扩展名为.master)中,该方法也没有提供,因此您无法从中调用Web方法。
您可以使用的解决方法是在继承自Page的类中定义它,并使所有页面都从该类继承。由于它是一种公共方法,因此它将在您的所有页面上公开,因此可用。基本上,是项目页面的基页。在这种情况下,您只需要使用当前页面的地址进行呼叫。这只有在您将在每个页面上使用的内容时才有用,例如菜单。
您可以使用的第二种解决方法是在项目中放置的.asmx Web服务中定义WebMethod。它就像在页面上调用WebMthod一样,只需要使用.asmx Webservice的地址而不是页面来进行调用。
答案 2 :(得分:0)
答案 3 :(得分:0)
我认为问题在于您尝试发布到.cs文件。由于安全原因,ISS不提供扩展名.cs。因此,即使您的方法在代码隐藏文件中生效,您也必须发布到.aspx文件。 ASP.NET将为您完成剩下的工作。 所以试试:
$.ajax({
type: "POST",
url: "/Master.Master.aspx/UserStatus",
contentType: "application/json; charset=utf-8",
data: "{}",
dataType: "json",
success: AjaxSucceeded,
error: AjaxFailed
});
function AjaxSucceeded(result) {
if (result.d.length != 0) {
for (var i = 0; i < result.d.length; i++) {
$(result.d[i]).hide();
}
}
}
function AjaxFailed(result) {
alert("Error");
}