繁体   English   中英

通过PageMethod触发服务器端方法

[英]Firing a server-side method via PageMethod

我编写了一个JavaScript函数,当用户在RadConfirm对话框中单击“确定”时将触发该函数。 应该触发JavaScript回调到服务器以从数据库中删除记录。 这可能不是最好的体系结构(我可以想到实现目标的其他方法),但是我正在努力通过学习作为努力。 以下是我到目前为止编写的代码。 我想我大部分都正确了。

此Javascript函数:

        function confirmCallBackFn(arg) {

        if (arg == true) {
            PageMethods.RemovePackagePageMethod();
        }
        else {
        }
    }

应该在服务器上调用以下WebMethod:

    [WebMethod()]
public static void RemovePackagePageMethod(object sender, EventArgs e)
{
    Inventory inv = new Inventory();
    inv.RemovePackage();

}

依次应执行以下方法:

    private void RemovePackage()
{
    SBMData2.SBMDataContext db = new SBMData2.SBMDataContext();

    var boxes = from p in db.Packages
                where p.PackageID == Convert.ToInt32(RadGrid1.SelectedValues["PackageID"].ToString())
                select p;

    foreach (var box in boxes)
    {
        db.Packages.DeleteOnSubmit(box);
    }

    try
    {
        db.SubmitChanges();
        RadGrid1.Rebind();
    }
    catch (Exception ex)
    {
        RadWindowManager1.RadAlert("System error deleting package", 200, 200, "exception", null);

    }

}

一切对我来说看起来都很不错,似乎与我在该网站上阅读的帖子以及其他有关使用PageMethod在服务器上激发代码的帖子保持一致。 但是,它无法在最终方法(我已经单独测试)中执行删除。 有人可以发现我错了吗?

您试图在RemovePackage方法中使用RadGrid1控件,但是您正在从Web方法中调用该方法,因此没有Page类的实例,因此也没有RadGrid1控件。

您必须将要删除的记录的ID从客户端代码发送到Web方法,再从该位置发送到RemovePackage方法。

另外,您无法重新绑定RadGrid1控件以使更改显示在页面中。 Web方法调用不是页面请求,因此没有页面响应可以包含更新的网格。 您将必须在客户端代码中更新网格。

尝试将RemovePackage方法设为公开(朋友也可以使用)而不是私有,然后尝试。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM