这是我的代码。 PayPal向ActionResult发送RowID,其为item_number
,交易ID为pp_txn_id
。我很简单想要引用我的交易表tblPayPalTransactions
中的行,然后用pp_txn_id
更新它,我看到它是在PayPal购买后发回给我的。然后将照片链接发送到DownloadPicture.cshtml
视图。
我根本无法找出更新事务表的语法。我能做的一切。试图完成一个项目。
//ROW IN PHOTOS IS item_number, PAYPAL PAID TRANSACTION IS pp_txn_id
public ActionResult thankyou(string item_number, string pp_txn_id)
{
var photo = db.PayPalTransactions.Where(x => x.RowID == Convert.ToInt32(item_number));
photo.pp_txn_id = pp_txn_id;
db.SubmitChanges();
var thisPaidPhoto = (from p in db.Photos
where p.PhotoId == Convert.ToInt32(item_number)
select p).FirstOrDefault();
return View(thisPaidPhoto);
}
答案 0 :(得分:2)
您当前的代码会出现编译错误,因为Where
方法会返回一个集合。所以基本上photo
变量将是一个集合类型,它不会有pp_txn_id
属性。
假设rowid是该表中记录的唯一标识符,则需要获取单个记录。
您可以使用FirstOrDefault
方法。
var rowId=Convert.ToInt32(item_number)
var photo = db.PayPalTransactions.FirstOrDefault(x => x.RowID ==rowId);
if(photo!=null)
{
// update now
photo.pp_txn_id = pp_txn_id;
db.SubmitChanges();
}
else
{
// item does not exist in table. Handle as needed.
}
另请注意,如果输入不是有效的数值,Convert.ToInt32
方法将抛出异常。我会使用Int32.TryParse
来保证安全。但如果您确定值始终是数字类型,我建议您使用数字类型作为参数(int
或long
)。
答案 1 :(得分:0)
public ActionResult thankyou(string item_number, string pp_txn_id)
{
var photo = db.PayPalTransactions.SingleOrDefault(x => x.RowID == Convert.ToInt32(item_number));
if(photo != null){
photo.pp_txn_id = pp_txn_id;
db.SubmitChanges();
var thisPaidPhoto = (from p in db.Photos
where p.PhotoId == Convert.ToInt32(item_number)
select p).FirstOrDefault();
return View(thisPaidPhoto);
}
else
{
return View();
}
}