我正在使用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();
}
}
}
答案 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
。