私のプロジェクトでは、paypal経由で支払いを選択することができ、paypalサイトに転送されます。ユーザーが終了したら、私のサイトに戻り、直接「Choose Address」ページに移動します。この時点で私はエラーになります。ルーティングではNull Entryが発生する
パラメータ辞書は、非NULL可能タイプのパラメータ「住所」のヌルエントリを含む「可能System.Int32」メソッドは「System.Web.Mvc.ActionResult CheckoutPaypal(System.Web.Mvc.FormCollection、システム。文字列、Int32) '' T_shirt_Company_v3.Controllers.CheckoutController '。オプションのパラメータは、参照型、null可能型、またはオプションのパラメータとして宣言する必要があります。
私の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 });
}