如何解决在使用asp.net的Web服务中创建数据驱动的jquery下拉菜单时出错
|| 我浏览了以下文章并实现了相同的用法,即我使用Web服务而不是WCF服务,当我运行以下html文件时,动态菜单不显示。请问我到底出了什么问题。 这是我的html文件。<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">
<html xmlns=\"http://www.w3.org/1999/xhtml\">
<head>
<title>Sample Test Application</title>
<style type=\"text/css\">
.Menu
{
width:200px;
text-align:center;
border:solid 2px gray;
padding:0px;
background-color:Silver;
cursor:hand;
font-weight:bold;
}
.MenuItem
{
width:192px;
text-align:center;
border:solid 1px silver;
padding:2px;
background-color:whitesmoke;
}
</style>
<script type=\"text/javascript\" src=\"Scripts\\jquery-1.4.1.js\">
$(document).ready(function() {
$.ajax(
{
type: \"GET\",url: \"http://localhost:50542/MenuItems.asmx/GetMenus\",contentType: \"application/json; charset=utf-8\",dataType: \"json\",success: CreateMenus,error: function(err) {
alert(err.status + \" - \" + err.statusText);
}
}
);
});
function CreateMenus(results) {
for (var i = 0; i < results.length; i++) {
$(\"<div class=\'Menu\'>\" + results[i].Text + \"</div>\")
.click({ MenuId: results[i].MenuId },OnMenuClick)
.appendTo(\"#accordionContainer\");
}
}
function OnMenuClick(event)
{
$(\"div[id ^= \'menuItemGroup\']\").slideUp(500);
$.ajax(
{
type: \"GET\",url: \"http://localhost:50542/MenuItems.asmx/GetMenuItems\",data: \'{\"menuId\":\"\' + event.data.MenuId + \'\"}\',success: function(items) {
$(event.target).children().remove();
var html = \"<div id=\'menuItemGroup\" + event.data.MenuId + \"\' style=\'display:none\'>\";
for (var j = 0; j < items.length; j++) {
html += \"<div class=\'MenuItem\'> <a href=\'\" + items[j].NavigateUrl + \"\'>\" +
items[j].Text + \"</a></div>\";
}
html += \"</div>\";
$(event.target).append(html);
$(\"#menuItemGroup\" + event.data.MenuId).slideDown(500);
},error: function(err) {
alert(err.status + \" - \" + err.statusText);
}
}
)
}
</script>
</head>
<body>
<div id=\"accordionContainer\" ></div>
<div class=\"Menu\"></div>
<div class=\"MenuItem\"></div>
</body>
</html>
这是我的网络服务文件
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Services;
using System.Web.Script.Services;
namespace ServiceMahe
{
/// <summary>
/// Summary description for MenuItems
/// </summary>
[WebService(Namespace = \"http://tempuri.org/\")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
[System.ComponentModel.ToolboxItem(false)]
// To allow this Web Service to be called from script,using ASP.NET AJAX,uncomment the following line.
// [System.Web.Script.Services.ScriptService]
public class MenuItems : System.Web.Services.WebService
{
[WebMethod]
public string HelloWorld()
{
return \"Hello World\";
}
[WebMethod]
[ScriptMethod(ResponseFormat = ResponseFormat.Json)]
public Menu[] GetMenus()
{
SampleDataClassesDataContext db = new SampleDataClassesDataContext();
List<Menu> menus = new List<Menu>();
var temp = from item in db.Menus
select item;
foreach (var obj in temp)
{
Menu m = new Menu();
m.MenuId = obj.MenuId;
m.Text = obj.Text;
menus.Add(m);
}
return menus.ToArray();
}
[WebMethod]
[ScriptMethod(ResponseFormat=ResponseFormat.Json)]
public MenuItems1[] GetMenuItems(int menuId)
{
SampleDataClassesDataContext db = new SampleDataClassesDataContext();
List<MenuItems1> items = new List<MenuItems1>();
var temp = from item in db.MenuItems
where item.MenuId == menuId
select item;
foreach (var obj in temp)
{
MenuItems1 mi = new MenuItems1();
mi.MenuId = (int)obj.MenuId;
mi.MenuItemId = obj.MenuItemId;
mi.Text = obj.Text;
mi.NavigateUrl = obj.NavigateUrl;
items.Add(mi);
}
return items.ToArray();
}
}
}
解决方法
取消注释此行...
[System.Web.Script.Services.ScriptService]
解释在您的代码本身中。
允许此Web服务
使用ASP.NET从脚本调用
AJAX,取消注释以下行。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。