c# - 通过 PageMethod 触发服务器端方法

标签 c# javascript asp.net

我编写了一个 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 在服务器上触发代码的帖子一致。但是,它无法在 final方法中执行删除(我已经单独测试过)。有人能发现我哪里出错了吗?

最佳答案

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

您必须将要从客户端代码删除的记录的 ID 发送到 Web 方法,然后从那里发送到 RemovePackage 方法。

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

关于c# - 通过 PageMethod 触发服务器端方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6851318/

相关文章:

javascript - 我可以使用 node.js cherrio 解析器从 espncricinfo 实时获取各个玩家的分数吗

javascript - 在 Knockout JS foreach 循环中围绕每个 'n' 项放置一个容器

javascript - JSON 对象,绘制图表时出现奇怪的情况,怎么了?

asp.net - 模式比较时如何忽略数据丢失警告?

java - Java 与 C# 中的事件处理

c# - 如何将 Expression<Func<T, DateTime>> 转换为 Expression<Func<T, object>>

javascript - 如何从 ReactJS 中的 onClick 函数调用另一个组件

c# - 访问 UserControl 的模板项

c# - 如何创建具有 EntityState 未知关系的对象

c# - 队列 ForEach 循环抛出 InvalidOperationException