[英]c# MVC5 RedirectToAction not working - “Sequence contains no matching element”
我有一個執行以下操作的控制器操作:
但是,MVC不斷拋出錯誤“序列不包含匹配的元素”,我正在努力找出原因。
客戶控制器獲取產品列表並將其添加到用戶帳戶:
[HttpPost]
[ValidateAntiForgeryToken]
public async Task<ActionResult> AddProduct(List<Product> products)
{
//var acc = FetchCurrentUserAccount();
if (db.Accounts != null)
{
var acc = db.Accounts.Find(UserManager.FindByIdAsync(User.Identity.GetUserId()).Result.Account.AccountID);
foreach (var product in products)
{
if (product.IsSelected)
{
product.PaymentStatus = enPaymentStatus.Pending
acc.ProductsPurchased.Add(product);
}
}
await db.SaveChangesAsync();
return RedirectToAction("Pay", "Products", new {id = acc.AccountID} );
}
return HttpNotFound();
}
帶有AccountID的產品控制器,找到該帳戶並將其作為模型傳遞給View:
[HttpGet]
public ActionResult Pay(int? id)
{
var acc = db.Accounts.Find(id);
return View(acc);
}
視圖本身:
@using PPPv2.Models
@model Account
@{ var subtotal = 0.0d;}
<h2>Payment:</h2>
@if (Model != null)
{
<h4>Thank you @Model.Salutation @Model.LastName</h4>
<h4>Please check that the product(s) and amounts below are correct before completing your purchase.</h4>
foreach (var item in Model.ProductsPurchased)
{
<div>
@Html.DisplayFor(modelItem => item.Name)
<div>
@Html.DisplayFor(modelItem => item.Price)
@{ subtotal += item.Price; }
</div>
</div>
}
<div>
Total to pay:
<div>
@Html.Display(String.Format("£{0:#,###0.00}", subtotal))
</div>
</div>
@Html.ActionLink("Pay", "Process", "Products", new {id = Model.ProductsPurchased.First(x => x.PaymentStatus == enPaymentStatus.Sold)}, new {@class = "btn btn-warning"})
}
else
{
<div>
No products were found in your cart... Odd...
<div>
@Html.ActionLink("Select a product", "AddProduct", "Account", null, new {@class = "btn btn-warning"})
</div>
</div>
}
注意事項:
有任何想法嗎?
在這條線上:
@Html.ActionLink("Pay", "Process", "Products",
new {id = Model.ProductsPurchased.First(x => x.PaymentStatus == enPaymentStatus.Sold)},
new {@class = "btn btn-warning"})
您首先需要添加一個條件,以檢查ProductsPurchased集合中是否有任何商品的狀態為“已售出”。 您可能還需要確保要顯示狀態為Sold的產品,或者按照控制器代碼的建議顯示狀態為Pending的產品 。
所以,基本上
if(Model.ProductsPurchased.Any(x => x.PaymentStatus == enPaymentStatus.Sold/*or Pending?*/)){
@Html.ActionLink("Pay", "Process", "Products",
new {id = Model.ProductsPurchased.First(x => x.PaymentStatus == enPaymentStatus.Sold/*or Pending?*/)},
new {@class = "btn btn-warning"})
}
我不確定修復方法,但我相信這是您不是在等待acc返回,更准確地說是返回。
UserManager.FindByIdAsync(User.Identity.GetUserId()).Result.Account.AccountID
因為您正在使用異步,所以我希望您在嘗試使用結果之前先使用await。 你試過麥
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.