我编写了一个 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/