【发布时间】:2016-09-07 02:03:43
【问题描述】:
在我的项目中,用户可以选择通过贝宝付款,然后将他们带到贝宝网站。完成后,用户返回我的网站并直接进入“选择地址”页面。此时我得到了错误;
参数字典包含方法“System.Web.Mvc.ActionResult CheckoutPaypal(System.Web.Mvc.FormCollection, System.String, Int32) 的不可为空类型“System.Int32”的参数“地址”的空条目)' 在“T_shirt_Company_v3.Controllers.CheckoutController”中。可选参数必须是引用类型、可空类型或声明为可选参数。
在我的 webconfig 中是返回地址;
<add key="return" value="http://localhost:57564/Checkout/CheckoutPayPal" />
这是我的“选择地址”控制器
public ActionResult CheckoutPaypal()
{
var cart = ShoppingCart.GetCart(this.HttpContext);
if (!cart.GetCartItems().Any())
return RedirectToAction("Index", "Store");
ViewBag.standard = cart.GetTotal();
ViewBag.fclass = cart.GetTotal() + 5;
ViewBag.fourty = cart.GetTotal() + 10;
return View();
}
/// <summary>
/// Gets the address and payment from the user
/// </summary>
/// <param name="values">address, payment, contact details</param>
/// <returns></returns>
[HttpPost]
public ActionResult CheckoutPaypal(FormCollection values, string id, int Address)
{
var order = new Order();
TryUpdateModel(order);
var deliveryAddress = storeDB.deliveryAddresses.Where(x => x.AdressId == Address).FirstOrDefault();
order.Address = deliveryAddress.Address;
order.City = deliveryAddress.City;
order.Country = deliveryAddress.Country;
order.PostalCode = deliveryAddress.PostalCode;
order.FirstName = deliveryAddress.FirstName;
order.LastName = deliveryAddress.LastName;
order.Phone = deliveryAddress.Phone;
order.Email = User.Identity.GetUserName();
order.EmailConfirm = User.Identity.GetUserName();
order.PaymentTransactionId = "Paid with paypal";
//sets date and username
order.Username = User.Identity.Name;
order.OrderDate = DateTime.Now;
//Order gets saved
storeDB.Orders.Add(order);
storeDB.SaveChanges();
//Order gets processed
var cart = ShoppingCart.GetCart(this.HttpContext);
cart.CreateOrder(order);
//Save again, total not saving properly until now
storeDB.SaveChanges();
var postageno = order.PostageList.ToString();
//adds the postage cost onto the total and updates the database
if (postageno == "FirstClass")
{
decimal addpostage = 5;
order.Total = order.Total + addpostage;
storeDB.SaveChanges();
}
else if (postageno == "TwentyFourHour")
{
decimal addpostage = 10;
order.Total = order.Total + addpostage;
storeDB.SaveChanges();
}
//Used to change quantity after order made and saved
using (TshirtStoreDB db = new TshirtStoreDB())
{
var details = db.OrderDetails.Where(od => od.OrderId == order.OrderId);
foreach (var od in details)
{
Product prod = (from p in db.Products where p.ProductId == od.ProductId select p).Single();
prod.Quantity -= od.Quantity;
}
db.SaveChanges();
}
return RedirectToAction("Complete",
new { id = order.OrderId });
}
【问题讨论】:
标签: c# asp.net-mvc entity-framework asp.net-mvc-4 paypal