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