[英]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.