无法使用Ajax调用服务器端方法

时间:2015-07-23 20:27:59

标签: jquery asp.net ajax 3-tier

我正在使用3层架构进行演示应用。

我正在尝试使用Ajax从表示层调用业务逻辑层方法。但它显示错误。我认为通过网址有一些错误。

以下是表示层中Index.aspx页面的Ajax调用:

$.ajax({
    type: "GET",
    url: "DemoApplication.BLL/BLL/ShowDetail",
    contentType: "application/json; charset=utf-8",
    dataType: "json",
    data: { },
    success: function (msg) {
        alert("data received");
    },
    error: function () {
        alert("couldn't proceed");
    }
});

以下是业务逻辑层中的方法:

namespace DemoApplication.BLL
{
    public class BLL
    {
        public static List<User> ShowDetail()
        {
            DAL.DAL dal = new DAL.DAL();
            return dal.ShowDetail();
        }
    }
}

2 个答案:

答案 0 :(得分:1)

我觉得你有点困惑,如果你试图从浏览器调用中间层方法,那就有问题了。想想如果支持它的含义。在我的业务逻辑层中,我可能有从未从表示层公开的方法。也许是一些后端维护工具使用的DropClientDatabase()。如果我可以通过JavaScript直接调用此方法怎么办?这意味着任何具有一点HTML和JavaScript技能的人都可以调用DropClientDatabase()并为您的用户带来很多问题。由于此方法位于BLL层,因此可以想象它不直接进行任何类型的身份验证检查(这可能是调用它的前提条件),所以噗,任何人都可以删除数据库。我们当然不希望这样。

我们需要明确定义可以从AJAX调用的方法,部分作为安全手段。您的业​​务层中的List<User> ShowDetail()方法应该从您的表示层代码(aspx.cs)中调用,如下所示

[WebMethod]
public static List<User> ShowDetail()
{
    //Call your method something like this
    var myVar = BLL.ShowDetail();
    //This will return your list in a JSON Format
    return myVar;
}

完成此操作后,您可以call it from JS using PageMethods或尝试通过此更改网址

url: "YourPageName.aspx/ShowDetail",

答案 1 :(得分:0)

这就是我在项目中实施的方式:

<强> AJAX

$.ajax({
        url: 'DataViewer.aspx/GetData',
        dataType: "json",
        type: 'POST',
        data: {},
        contentType: "application/json; charset=utf-8",
        success: function (data) {           
        },
        error: function (d) {

        }
    });

<强> ASP.NET

public partial class DataViewer: System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
        }

        [WebMethod]
        public static List<UserResult> GetData()
        {
            //No need to manually serialize the generic list
            return UserInfo.GetData();
        }

注意:

代码背后的

GetData()方法应该具有[WebMethod]属性,它应该是public static